接收开机广播自启动apk
系统开机广播
android.intent.action.BOOT_COMPLETED
可以通过adb指令模拟发送广播
am broadcast -a android.intent.action.BOOT_COMPLETED
指定receiver接收广播,这样可以不用一直开关机进行验证
am broadcast -a android.intent.action.BOOT_COMPLETED -n com.lxh.biji/com.lxh.biji.BootReceiver
android 9.0的开机自启动代码
广播接收Receiver
在 onReceive可以进行打开界面或者开启apk
package com.lxh.biji;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* create by lxh on 2023/2/20 Time:9:14
* tip:
*/
public class BootReceiver extends BroadcastReceiver {
private static final String TAG = "BootReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "lxh onReceive: " + intent.getAction());
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Log.i(TAG, "lxh BootReceiver: ready sent ");
Intent intentx = new Intent(context, MainActivity.class);
intentx.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intentx);
//Intent intentx = new Intent("com.lxh.biji.management.TCPServerService");
//intentx.setPackage("com.lxh.biji");
//context.startService(intentx);
}
}
}
清单
添加开机广播接收权限
静态注册广播接收
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lxh.biji"
android:installLocation="internalOnly">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Shuiji">
<activity
android:name=".MainActivity"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".BootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>
</manifest>
自启动失败的可能原因
1、清单未添加权限< uses-permission android:name=“android.permission.RECEIVE_BOOT_COMPLETED” />。
2、接收开机的广播采用动态注册。测试方法:修改成静态注册。
3、apk安装后从未启动过。未启动过一次的apk是收不到任何广播的。测试方法:先启动一次apk,再测试开机自启动。
4、应用安装到了sd卡上。安装在sd卡的应用是收不到BOOT_COMPLETED广播的。测试方法:在菜单的< manifest >里添加android:installLocation=“internalOnly”
5、被系统自带或其它等拦截,需在权限管理设置里放开开机自启动的权限。
6、系统开启了Fast Boot刷机模式。这种模式下系统启动并不会发送BOOT_COMPLETED广播。