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的日志.
但是,当我用我Activity的onCreate方法定义接收器时:
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?
仅供参考,在Android KitKat 4.4上运行
不幸的是,行动DREAMING_STARTED和DREAMING_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)
public static final int FLAG_RECEIVER_REGISTERED_ONLY
如果设置,当发送广播时,将仅调用已注册的接收器 - 不会启动BroadcastReceiver组件.
所以你不能在BroadcastReceiver声明中接收这些意图AndroidManifest.xml.你唯一的选择是动态注册BroadcastReceiver.
| 归档时间: |
|
| 查看次数: |
1405 次 |
| 最近记录: |