React Native应用设备重启/开关机后自动启动实现问题排查
安卓设备重启后自动启动React Native应用问题
我参考相关方案修改了React Native项目的安卓原生代码,但设备重启后应用并未自动启动。
AndroidManifest.xml 配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.freshot.co.ownerapp"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="false" android:theme="@style/AppTheme"> <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyA88RySEu8iI-oY15iKKLE25WKVjKefKjk"/> <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.freshot.co.ownerapp.BootReciever" android:enabled="true" android:exported="true" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application> </manifest>
BootReciever.java 代码
package com.freshot.co.ownerapp; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class BootReciever extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction() != null) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent i = new Intent(context, MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } } }
需求
当手机/平板重启或开机时,我的React Native应用能够自动启动。
问题排查与解决建议
- 开启厂商自启动权限:大部分安卓厂商(小米、华为、OPPO等)自带后台管理系统,默认禁止应用自启动。需前往设备「设置-应用管理-对应应用-权限」中开启「自启动」权限。
- 修正类名拼写错误:当前接收器类名
BootReciever存在拼写错误,正确应为BootReceiver,建议统一修正类名与Manifest配置,避免系统识别异常。 - 补充开机触发Action:在Manifest的接收器
intent-filter中添加ACTION_LOCKED_BOOT_COMPLETED,适配设备解锁前的触发场景;同时在onReceive方法中增加对应判断逻辑:if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) || intent.getAction().equals(Intent.ACTION_LOCKED_BOOT_COMPLETED) || intent.getAction().equals("android.intent.action.QUICKBOOT_POWERON")) { // 启动应用逻辑 } - 适配Android版本限制:Android 10及以上版本对后台启动Activity有严格限制,可改为通过前台服务启动应用:
- 在Manifest中添加前台服务权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> - 创建
BootStartService类实现前台服务启动逻辑,再由服务唤起MainActivity; - 修改
BootReceiver的onReceive方法,改为启动该前台服务。
- 在Manifest中添加前台服务权限:
- 注意测试安装方式:通过Android Studio直接调试安装的应用,部分设备可能无法触发开机广播,建议生成正式APK安装后测试,或在开发者选项中关闭「禁止后台启动」相关限制。
内容的提问来源于stack exchange,提问作者GS James
相关产品推荐
相关产品推荐

