Android(安卓)添加自定义BOOT_COMPLETED广播避免延迟
16lz
2021-12-04
Android 有自己的开机广播:
/** * Broadcast Action: This is broadcast once, after the system has finished * booting. It can be used to perform application-specific initialization, * such as installing alarms. You must hold the * {@link android.Manifest.permission#RECEIVE_BOOT_COMPLETED} permission * in order to receive this broadcast. * * This is a protected intent that can only be sent * by the system. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
但是在接触的一台设备上,这个广播在进入Launcher之后45秒才收到。明显慢了很多。
通过节点去控制设备的开光状态,节点在关机重启时会被重置为默认状态,这就意味着45s之后才能给节点设为用户上次的设置的值。在这之前的一些数据会丢失或错误计算。
所以只能添加一个自定义的开机广播,当系统启动完成即刻发出。但是要注意的是,此时并非真正意义上的“BOOT_COMPLETED”,也就是说系统的一些状态还没有初始化成功,比如IMEI号,此时去获取的话返回的是null,但是启动服务去执行自己的操作还是可以的。
添加方法:
diff --git a/kitkat/frameworks/base/services/java/com/android/server/SystemServer.java b/kitkat/frameworks/base/services/java/com/andrindex b61b9f3..eac817b 100644--- a/kitkat/frameworks/base/services/java/com/android/server/SystemServer.java+++ b/kitkat/frameworks/base/services/java/com/android/server/SystemServer.java@@ -983,6 +983,7 @@ class ServerThread { if (!headless) { startSystemUi(contextF); //startSimStateChangeService(contextF);+ sendCustomBootCompleted(contextF); } try { if (mountServiceF != null) mountServiceF.systemReady();@@ -1146,6 +1147,18 @@ class ServerThread { Slog.d("SimStateChange", "Starting service: " + intent); context.startServiceAsUser(intent, UserHandle.OWNER); }++ static final void sendCustomBootCompleted(Context context){+ try {+ Intent intent = new Intent();+ intent.setAction("test.intent.action.BOOT_COMPLETED");+ context.sendBroadcast(intent);+ System.out.println("send custom broadcast");+ } catch (Exception e) {+ e.printStackTrace();+ System.out.println("Unable to send custom broadcast");+ }+ } }
Okay,大功告成。
更多相关文章
- Android监听屏幕锁屏
- Android状态check、focused、pressed、selected小结
- Android与IOS异同点对比(1)------ 显示
- 处女男学Android(十五)---Android(安卓)广播机制之Broadcast Recei
- android:shape的使用 (android用xml文件生成图像控件)
- Android-statuabar电池管理
- 安卓隐藏标题栏状态栏 ,实现全屏效果
- Android中的Junit单元测试
- Android屏幕尺寸、标题栏高度、状态栏高度、当前View尺寸