You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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有严格限制,可改为通过前台服务启动应用:
    1. 在Manifest中添加前台服务权限:
      <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
      
    2. 创建BootStartService类实现前台服务启动逻辑,再由服务唤起MainActivity;
    3. 修改BootReceiver的onReceive方法,改为启动该前台服务。
  • 注意测试安装方式:通过Android Studio直接调试安装的应用,部分设备可能无法触发开机广播,建议生成正式APK安装后测试,或在开发者选项中关闭「禁止后台启动」相关限制。

内容的提问来源于stack exchange,提问作者GS James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:03:16