最近开发一个项目需要用到 APP 一开机启动,并且自己能运行。
一. 实现
继承一个 BroadcastReceiver 用来处理 BOOT_COMPLETED 广播消息
public class BootBroadcastReceiver extends BroadcastReceiver {
/**
* 可以实现开机自动打开软件并运行。
*/
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
KLog.i("BootReceiver 收到广播 : " + action);
if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
KLog.i("收到开机广播,启动程序");
Intent thisIntent = new Intent(context, MainActivity.class);
thisIntent.setAction("android.intent.action.MAIN");
thisIntent.addCategory("android.intent.category.LAUNCHER");
thisIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(thisIntent);
}
}
}
在 AndroidManifest.xml 中注册
<receiver
android:name=".receiver.BootBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="2147483647">
<!--注册开机广播地址-->
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<action android:name="android.media.AUDIO_BECOMING_NOISY" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
代码非常简单。。。但是!!有些手机会收不到广播。
二. 不能自动启动的原因
AndroidManifest.xml 中 BOOT_COMPLETED 部分不正确,或者缺少必要的 uses-permission。
应用安装到了 sd 卡内,安装在 sd 卡内的应用不能收到 BOOT_COMPLETED。
系统开启了 Fast Boot 模式,这种模式下系统启动不会发送 BOOT_COMPLETED。
应用程序安装后重来没有启动过,这种情况下应用程序接收不到任何广播,包括 BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION 等等。
所有,有些应用只有 Background Service,而不包括任何 Activity,是不能启动的。
还有一种情况。拿小米的手机为例,需要在应用信息页面打开自启动的按钮才可以实现开机自启动。所以需要多留意机型适配。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于