美文网首页安卓androidandroid
Android 应用开机自启的两个方案

Android 应用开机自启的两个方案

作者: isletn | 来源:发表于2018-04-23 20:45 被阅读347次

先说说两个案例

  1. Android3.1后,用户通过 设置->应用程序->xxx.APP->"强制停止" 杀掉APP时,APP此时处于停止状态(stopped),而这个 stoped 于 Activity 的 stop 是不同的。
    原因是 Android 为所有发送广播的 intent 添加了 FLAG_EXCLUDE_STOPPED_PACKAGES 这一属性
    FLAG_EXCLUDE_STOPPED_PACKAGES:已停止的APP不能收到广播。
    这里引出另一个FLAG:
    FLAG_INCLUDE_STOPPED_PACKAGES:能处理 intent 的应用可以接收到广播
  1. 通过使用APK安装的应用,没有启动过的话,收不到系统发出的广播。因为它也是处于停止状态的。

虽说停止状态的应用无法收到系统广播,但也有一个例外:安装在 /system/app 路径下的APP
所以,如果想要你的应用能收到广播,至少需要启动一次APP改变停止状态或者将应用 push 到 /system/app。

解决方案:

  • 1.通过 push xxx.apk /system/app 将应用安装到系统目录(需要root权限)

若提示 $ adb push ./xxx /xxx/
failed to copy './xxx' to '/xxx/xxx': Read-only file system

解决方法:
$ adb root

$ adb remount
remount succeeded

  • 2.使用FLAG_INCLUDE_STOPPED_PACKAGES这个标识,通过另一个应用启动你的应用,从而达到改变stop状态的目的

首先,在你的APP中创建一个BroadcastReceiver的子类,并在 onReceiver() 方法中实现相关逻辑实现自启

public class RebootBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
       Intent intent0 = new Intent(context, YourMainActivity.class);
   
       if (intent0 != null) {
           startActivity(intent0);
       } 
    }
}

然后,需要在你想要启动APP的 AndroidManifest.xml 中静态注册:

<receiver android:name=".RebootBroadcastReceiver"
          android:exported="true">
    <intent-filter>
        <action android:name="com.example.startApp"/>
    </intent-filter>
</receiver>

最后,广播发送者 APP 使用如下代码通知你想要启动的 APP

Intent intent = new Intent();
intent.setAction("com.example.startApp");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(intent);

OK~
以上就是Android开机自启的两个方案了。

相关文章

  • Android 应用开机自启的两个方案

    先说说两个案例 Android3.1后,用户通过 设置->应用程序->xxx.APP->"强制停止" 杀掉APP时...

  • Android静态广播多action冲突

    最近有个需求,开机自启,应用安装后自启,需要监听广播 问题:应用可以收到app覆盖的广播,无法收到开机广播修改: ...

  • 2019-03-06

    Android 定时开机方案 此方案用于实现Android主板的定时开机与Watchdog功能,应用于一些特殊产品...

  • Android开机自启

    第一步: 新建跳转到设置页面的弹窗 fun initSetDialog() {if (dialog != null...

  • linux 开机自启某应用

    #使用systemctl来控制启动 #这个方法比较好用,很方便 #编辑开机自启文件(这个应用是frps,所以命名为...

  • 关闭selinux和firewalld

    关闭selinux开机自启 关闭selinux 检查selinux状态 关闭firewalld并且关闭开机自启 检...

  • systemctl管理进程自启

    php-fpm开机自启 php-fpm.service nginx开机自启 nginx.service mysql...

  • nginx开机启动脚本

    加入开机自启

  • Android 实现程序开机自启

    最近要做个无界面的开发板程序,需要长期稳定运行,并开机自启,之前没做过,周工给了个提示 android.inten...

  • nc自启动

    例如开机自启cmd 自启nc反弹shell(一) 自启nc反弹shell(二)

网友评论

    本文标题:Android 应用开机自启的两个方案

    本文链接:https://www.haomeiwen.com/subject/efrzkftx.html