RN App开机自启动

RN的最后都逃不开原生...

一、目录

二、xml配置

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.rnproject"
  android:installLocation="internalOnly" // 限定仅安装在手机内存(而非SD卡)里
  android:permission="android.permission.RECEIVE_BOOT_COMPLETED" // 给到接收系统广播权限
  >

  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  // 给到接收系统广播权限

  <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">
    <activity
      android:name=".MainActivity"
      android:label="@string/app_name"
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize" // 使用键盘时不挤压屏幕
      android:windowSoftInputMode="adjustResize"
      android:noHistory="true" // 退出程序(离开屏幕)时即清除历史
      android:excludeFromRecents="true" // 退出程序(离开屏幕)时即从最近任务列表中移除
      >
      <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
    <receiver
      android:name=".BootBroadcastReceiver"
      android:enabled="true"
      android:exported="true">
        <intent-filter>
            <!--注册开机广播地址-->
            <action android:name="android.intent.action.BOOT_COMPLETED"/> // 监听系统开机广播
            <action android:name="android.intent.action.ACTION_BOOT_COMPLETED"/>
            <category android:name="android.intent.category.HOME" />
            <!-- <data android:scheme="file"/> -->
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_MOUNTED"/> // 监听媒体广播,当检测到有SD卡进入/出时会触发此广播
            <action android:name="android.intent.action.MEDIA_UNMOUNTED"/> // 作用同上
            <data android:scheme="file">
            </data>
        </intent-filter>
    </receiver>
  </application>
</manifest>

三、com.rnproject

BootBroadcastReceiver.java

package com.rnproject; 

import android.content.BroadcastReceiver;  

import android.content.Context;  

import android.content.Intent;  

import android.util.Log;

public class BootBroadcastReceiver extends BroadcastReceiver {

    // 系统启动完成
    static final String ACTION = "android.intent.action.BOOT_COMPLETED";

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.d("BootBroadcastReceiver", intent.getAction()); 

        // 当收听到的事件是“BOOT_COMPLETED”时,就创建并启动相应的Activity和Service
        if (intent.getAction().equals(ACTION)) {
            Intent activityIntent = new Intent(context, MainActivity.class);    // 开机启动的Activity
            activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            // 启动Activity
            context.startActivity(activityIntent);
        }
    }

}

四、踩坑

查遍了网上的各种方法,配置了所有权限并规避了所有网页已提到问题,仍不能成功自启动....

为此还贡献了StackOverflow上的首问...

终于在大神的指导下,发现android8.0以上有些功能不再支持,因此需要降低targetSdkVersion至25以下...

以及,android3.0之后,谷歌为防止垃圾app自启动,做了一些限制,因此app需要在非stopped state情况下才能运行,即打开app,并确定它在你的任务列表里(不要删除进程),它才能开机自启动...

—— 完 ——

原文地址:https://www.cnblogs.com/bbcfive/p/10976340.html

时间: 2024-10-12 23:35:38

RN App开机自启动的相关文章

Android中app开机自启动的开发

(1)首先添加权限开机启动权限 <!--开机启动权限--> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> (2)注册一个BroadcastReceiver来检测android系统开机时发出的开机广播 package com.wxyz.dengchaoqun.testswf; import android.content.BroadcastReceiver;

为你的MacOS App添加开机自启动(Swift)

猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/52104828 关于Mac下如何给自己App添加开机自启动功能,你可以了解下Mac Developer Library中的说明. There are two ways to add a login item: using the Service Management framework, and using a

Android笔记之 开机自启动

在项目中用到开机自动运行功能,因此学习了下,在此作为笔记记录下. 主要是以下4个步骤: 1.原理了解: 通过搜查资料发现,当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED,因此我们只需要在自己的应用中接收这个广播,然后启动APP即可. 2.编写接收器 既然是接收广播,必然是要用广播接收器,因此新建一个继承自广播BroadcastReceiver的类来专门接收上

linux下数据库实例开机自启动设置

linux下数据库实例开机自启动设置 1.修改/oratab [[email protected] ~]# vi/etc/oratab     --把N改为Y,如下提示 # This file is used by ORACLEutilities.  It is created by root.sh # and updated by the Database ConfigurationAssistant when creating # a database. # A colon, ':', is

安卓开机自启动demo

package com.example.openstart; import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; publ

Linux下oracle开机自启动设置

今天在虚拟机安装完oracle数据库重启系统后想进入数据库却发现如下错误: 出现ORA-01034和ORA-27101的原因是多方面的:主要是oracle当前的服务不可用,shared memory realm does not exist,是因为oracle没有启动或没有正常启动.那么如何在Linux启动时自动启动Oracle监听和实例呢? 首先尝试使用oracle启动数据库的命令dbstart,可是发现又报错如下错误: ORACLE_HOME_LISTNER is not SET, unab

linux下数据库实例监听开机自启动设置

linux下数据库实例监听开机自启动设置 2016/5/16 zhanky 脚本介绍 在开始之前,我们先介绍一下几个会用到的脚本. oratab oratab文件是在创建数据库实例时建立的,在安装时使用root用户执行root.sh脚本后得到.(如果忘记也可以直接手动创建.) 在$ORACLE_HOME/bin目录下的$ORACLE_HOME/bin/dbstart和$ORACLE_HOME/bin/dbshut需要调用/etc/oratab文件,如果不存在,dbstart和dbshut将失败,

android项目 之 来电管家(8) ----- 添加开机自启动监听服务

现在大多数的应用都会开机自启动,来电管家更是如此,添加了开机自启动监听服务后,开机后即使你没有打开来电管家应用程序,一样可以拦截来电信息. 开机自启动Activity或Service的方法: 主要步骤: 1.  要有开机要启动的service或activity(这里开机要启动的当然就是ListenService了) 2. 编写一个BroadcastReceiver用以捕获ACTION_BOOT_COMPLETED这条广播,并在捕获之后启动我们要启动的Activity或service. BootC

用Xamarin 实现园友的 :Android浮动小球与开机自启动

原文:用Xamarin 实现园友的 :Android浮动小球与开机自启动 前两天看园子里有筒子写了个 Android浮动小球与开机自启动  , 感觉这种被 360 玩烂的功能原来是如此的简单啊... 我不会 Java, 当然也不懂如何 用 ADT 开发 Android App. 但是我看过几天 Xamarin 啊,C# 我还是会的.. 用 Xamarin 做Android , 只要对着 java 源码, 我还是能翻译一份出来的. 我第一时间安装了 VS2015 , 挺好的,自带的 Android