android 开机广播是在哪里发出的

阅读: 评论:0

android 开机广播是在哪里发出的

android 开机广播是在哪里发出的

做 android 开发都知道有开机广播这回事,具体从哪里发出的呢?
追溯下源码,在 AN 9.0 frameworks/ 目录下搜索 ACTION_BOOT_COMPLETED 得知,
frameworks/base/services/core/java/com/android/server/am/UserController.java 文件里,
具体方法是 finishUserUnlockedCompleted

private void finishUserUnlockedCompleted(UserState uss) {synchronized (mLock) {// 省略其他Slog.i(TAG, "Sending BOOT_COMPLETE user #" + userId);// Do not report secondary users, runtime restarts or first boot/upgradeif (userId == UserHandle.USER_SYSTEM&& !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) {int uptimeSeconds = (int) (SystemClock.elapsedRealtime() / 1000);MetricsLogger.Context(), "framework_boot_completed",uptimeSeconds);}final Intent bootIntent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);bootIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT| Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);mInjector.broadcastIntentLocked(bootIntent, null, new IIntentReceiver.Stub() {@Overridepublic void performReceive(Intent intent, int resultCode, String data,Bundle extras, boolean ordered, boolean sticky, int sendingUser)throws RemoteException {Slog.i(UserController.TAG, "Finished processing BOOT_COMPLETED for u" + userId);}}, 0, null, null,new String[] { android.Manifest.permission.RECEIVE_BOOT_COMPLETED },AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, userId);}
}

指定了 flag 为 Intent.FLAG_RECEIVER_NO_ABORT ,无法被截断;
需要声明权限 android.Manifest.permission.RECEIVE_BOOT_COMPLETED

本文发布于:2024-02-03 02:53:54,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170690003148177.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:是在   android
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23