Android 开机自启动

首先实现开机自启动:

第一步创建一个广播接收者,如MyBootBroadcastReceiver.java

View Code

第二步给receiver配置对应intent-filter

View Code

第三步添加权限,缺少这步则无法在Android 3.0及其之前版本上自启动

View Code

上面的实现有以下【限制】:

1.由于Android系统在外置SD卡加载前广播ACTION_BOOT_COMPLETED,于是如果应用安装在外置SD卡上,它无法接收到此广播,原文见Broadcast Receivers listening for "boot completed"

2.从Android 3.1(API level对应NDK版本)开始,系统的包管理器保持跟踪处于停止状态(stopped state)的应用程序,提供了一种控制其从后台进程和其它应用程序启动的方式。这种停止状态的应用程序指那些安装了但从未启动过的apk,或被用户在程序管理中force stop的apk。Android系统为防止广播无意或不必要开启停止状态的组件,它给所有广播intent添加了FL​​AG_EXCLUDE_STOPPED_PACKAGES标志(不设置和同FLAG_INCLUDE_STOPPED_PACKAGES一起设置结果都是此标志),

Intent.java

View Code

IntentResolver.java

View Code

此标志指广播intent排除停止状态的应用,原文见Launch controls on stopped applications。用户可以给自己的应用或者后台服务添加FLAG_INCLUDE_STOPPED_PACKAGES标志以唤醒停止状态的应用,但系统自带的广播intent,用户无法修改,只能接受;注意系统级应用都不是停止状态

PackageManagerService.java中重写IntentResolver

View Code


最后禁止开机自启动,参考文章android手机root后的安全问题 (四)

原文地址:https://www.cnblogs.com/fanfeng/p/3236178.html