如何使用Flutter实现手机解锁后应用自动自启动功能?
Flutter端实现解锁后自启动的可行方案
自启动属于平台原生能力,需要分别针对Android、iOS端做原生层适配,Flutter侧仅需要做少量配置即可:
一、Android端实现(兼容性最好,适配无障碍应用场景)
Android系统本身支持监听开机完成、用户解锁完成的系统广播,可通过原生代码注册广播接收器实现,也可直接用成熟的第三方封装插件降低开发成本:
- 权限配置:首先在
android/app/src/main/AndroidManifest.xml里添加如下权限和广播声明:
<!-- 接收开机完成广播权限 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- 解锁屏幕监听权限 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
然后在application标签内添加广播接收器声明:
<receiver android:name="io.flutter.plugins.autostart.BootCompleteReceiver" android:enabled="true" android:exported="true"> <intent-filter> <!-- 监听开机完成 --> <action android:name="android.intent.action.BOOT_COMPLETED" /> <!-- 监听用户解锁完成 --> <action android:name="android.intent.action.USER_PRESENT" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
- 功能实现:如果不想自行编写原生广播代码,可以直接使用
auto_start插件,在pubspec.yaml中引入依赖后,只需要在Flutter入口初始化时调用一次权限申请即可:
import 'package:auto_start/auto_start.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 申请自启动权限,会自动跳转到对应厂商的自启动权限设置页 await AutoStart.getAutoStartPermission(); runApp(const MyApp()); }
注:国内Android厂商普遍对自启动权限做了定制限制,你的应用属于无障碍属性,可以在引导页明确告知用户需要授予自启动权限才能正常使用,大部分厂商的系统应用商店对无障碍类应用的自启动限制会更宽松。
二、iOS端实现
iOS系统受沙盒机制限制,没有公开的解锁自启动接口,仅能通过两种方式实现近似效果:
- 如果你开发的是MFi认证的蓝牙配件配套应用,可以通过蓝牙唤醒触发应用启动,普通应用不支持该能力
- 申请无障碍权限后,可通过系统辅助功能的特定事件触发应用唤醒,但无法保证100%可以在解锁后强制启动,苹果官方对普通应用的后台唤醒、自启动限制非常严格。
内容的提问来源于stack exchange,提问作者Omar Elassal
相关产品推荐
相关产品推荐

