在AndroidManifest中注册Intent.ACTION_DREAMING_STARTED

Sna*_*ker 3 android broadcastreceiver android-manifest android-intent android-broadcast

所以我一直试图Intent.ACTION_DREAMING_STARTED在我的内部注册AndroidManifest但没有成功.

        <application>
        ...
            <receiver android:name=".broadcastReceivers.DreamingReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.DREAMING_STOPPED"/>
                    <action android:name="android.intent.action.DREAMING_STARTED"/>
                </intent-filter>
            </receiver>
        ...
        </application>
Run Code Online (Sandbox Code Playgroud)

这是接收器的定义.

public class DreamingReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Log.d("DreamingReceiver", "Intent: " + intent.getAction());
    }
}
Run Code Online (Sandbox Code Playgroud)

当白日梦实际开始时,就没有来自该BroadcastReceiver的日志.


但是,当我用我ActivityonCreate方法定义接收器时:

        this.receiver = new BroadcastReceiver()
        {
            @Override
            public void onReceive(Context context, Intent intent)
            {
                Log.d("Activity Dreaming", "Intent: " + intent.getAction());
            }
        };

        IntentFilter filter = new IntentFilter(Intent.ACTION_DREAMING_STARTED);
        filter.addAction(Intent.ACTION_DREAMING_STOPPED);

        this.registerReceiver(this.receiver, filter);
Run Code Online (Sandbox Code Playgroud)

每当我的设备进入/离开白日梦时,我都会收到日志.有没有理由为什么BroadcastReceiver我在AndroidManifest中定义的内容没有捕获到Intent?

显然,根据参考文献,这不需要任何许可Intent

仅供参考,在Android KitKat 4.4上运行

Mat*_*ini 8

不幸的是,行动DREAMING_STARTEDDREAMING_STOPPED标有该标志FLAG_RECEIVER_REGISTERED_ONLY,你可以看到在这里:

private final Intent mDreamingStartedIntent = new Intent(Intent.ACTION_DREAMING_STARTED)
        .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
private final Intent mDreamingStoppedIntent = new Intent(Intent.ACTION_DREAMING_STOPPED)
        .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
Run Code Online (Sandbox Code Playgroud)

引用developer.android.com:

public static final int FLAG_RECEIVER_REGISTERED_ONLY
如果设置,当发送广播时,将仅调用已注册的接收器 - 不会启动BroadcastReceiver组件.

所以你不能在BroadcastReceiver声明中接收这些意图AndroidManifest.xml.你唯一的选择是动态注册BroadcastReceiver.