Android 11 上未收到 RECEIVE_BOOT_COMPLETED

问题描述 投票:0回答:3

我正在重新启动手机,希望看到一条日志消息。我已在

BroadcastReceiver
中注册了
Androidmanifest
,但没有收到任何消息。我错过了什么?

androidmanifest:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />


    <!-- Receives an event when the device has completed a reboot -->
    <receiver
        android:name=".BootReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT"/>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.BOOT" />
            <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>

启动接收器:

class BootReceiver : BroadcastReceiver() {
    override fun onReceive(p0: Context, p1: Intent) {
        Log.i("BootReceiver", "Boot event received")
    }
}

当我过滤“启动”日志记录时,我看到其他几个应用程序正在记录该事件,但不是我自己的应用程序:

I/NU.LockBootCompleteReceiver: onReceive : Intent { act=android.intent.action.LOCKED_BOOT_COMPLETED flg=0x89000010 cmp=com.samsung.android.app.telephonyui/.netsettings.ui.receiver.LockBootCompleteReceiver (has extras) }
I/BCL@CoreSvc: (CoreServiceComponentEnabler) updateComponent() : class com.samsung.android.bixby.receiver.token.BootCompleteReceiver | 2
I/BCL@CoreSvc: (CoreServiceComponentEnabler) updateComponent() : class com.samsung.android.bixby.receiver.token.LazyBootCompleteReceiver | 1
I/CIDManager: [onReceive(BootReceiver.java:20)] onReceive: android.intent.action.LOCKED_BOOT_COMPLETED
I/ActivityManager: Start proc 7201:com.samsung.android.game.gametools/u0a79 for broadcast {com.samsung.android.game.gametools/com.samsung.android.game.gametools.floatingui.receiver.GameBoosterBootCompleteReceiver}
I/GameTools: BootCompleteReceiver already enabled.
I/GameTools: GameBoosterBootCompleteReceiver: onReceive: Intent.ACTION_LOCKED_BOOT_COMPLETED
I/GameTools: GameBoosterBootCompleteReceiver: clear runtime settings on boot complete.
I/GameTools: GameBoosterBootCompleteReceiver: register Intent.ACTION_USER_UNLOCKED
I/GameTools: GameBoosterBootCompleteReceiver: register Intent.ACTION_USER_UNLOCKED via EventDelegationManager
I/ORC/FbeBootReceiver: onReceive : android.intent.action.LOCKED_BOOT_COMPLETED
I/ORC/FbeBootReceiver: FBE islocked : true
I/CS/MsgFMMReceiverService: PCW LOCK. handlePCWLockMessage. LockedBootComplete : true
I/CS/xmsFbeJobService: onLockedBootCompleted()
I/ORC/FbeMigrationJobService: onLockedBootCompleted()
I/StateUtils: isDirectBootMode On : true
I/PackageManager: !@Start postBootUpdate
I/PackageManager: !@Finish postBootUpdate dexopted: 3
android kotlin android-intent
3个回答
0
投票

删除:

<category android:name="android.intent.category.DEFAULT"/>

类别通常仅用于活动,而不用于广播。


0
投票

Android3.1之后,为了加强安全控制,系统在应用程序安装后或在(设置)应用程序管理中强制关闭。该状态下,除非广播带有 FLAG_INCLUDE_STOPPED_PACKAGES 标志,否则无法接收到广播,并且默认情况下所有系统广播都是 FLAG_EXCLUDE_STOPPED_PACKAGES,所以无法通过系统广播自启动。

因此,安装应用程序后,必须先自行启动应用程序,使其不处于停止状态,才可以接收广播。


-1
投票

每次重新启动设备时我都能看到日志。 尝试更换您的设备并进行测试。

检查清单。

stopped state

© www.soinside.com 2019 - 2024. All rights reserved.