赞
踩
1.预植入系统目录
/system/app/应用目录/my.apk
系统启动就会启动应用
2.普通安装
第一次 系统启动不会启动应用 ,打开应用
第二次 就会自启动
通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。
那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,
这样就 有权限来修改相关系统设置了,比如系统时间
在 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的处理方法
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。