Android开机自启动APP设置
带有自启动广播的APP (低版本(5.0以下),模拟器,定制系统)
1.预植入系统目录
/system/app/应用目录/my.apk
系统启动就会启动应用
2.普通安装
第一次 系统启动不会启动应用 ,打开应用
第二次 就会自启动
关于sharedUserId:
通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。
那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,
这样就 有权限来修改相关系统设置了,比如系统时间
Code
在 AndroidManifest.xml中
<!--开机启动-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
/// 可选
android:sharedUserId="android.uid.system">
<!--启动监听广播-->
<receiver android:name=".receiver.BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
public class BootBroadcastReceiver extends BroadcastReceiver {
public static final String TAG BootBroadcastReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
Logger.d(TAG,"Action=="+intent.getAction());
restartApplication(context);
}
}
}
/**
* 重启应用
* @param context
*/
public static void restartApplication(Context context) {
final Intent intent = context.getPackageManager().
getLaunchIntentForPackage(context.getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}
adb发送BOOT_COMPLETED
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
命令发送BOOT_COMPLETED广播,而不用重启测试机或模拟器来测试BOOT_COMPLETED广播,
这条命令可以更精确的发送到某个package,如下:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c
android.intent.category.HOME -n package_name/class_name
在Android5.0以上手机需要用户手动开启自启动权限
Note:在高版本手机上不建议设置开机自启动
一台HuaWei P30 上收不到启动广播(设置自启动管理也无效);
普通安装
.so库放在 data/app/lib 下
预植入系统
.so库放在system/lib下
参考:Android如何通过shareduserid获取系统权限
Android针对高版本实现开机自启动时无法监听BOOT_COMPLETED的处理方法