0
在Android 4中,所有工作都正常。在Android 6中,不会调用动态注册的BroadcastReceiver
的onReceive()
。我用这个代码注册接收器:Android 6未注册BroadcastReceiver进行音乐活动
IntentFilter filter = new IntentFilter();
filter.addAction("com.android.music.metachanged");
filter.addAction("com.android.music.playstatechanged");
filter.addAction("com.android.music.playbackstatechanged");
filter.addAction("com.android.music.playbackcomplete");
filter.addAction("com.android.music.queuechanged");
filter.addAction("com.android.music.musicservicecommand");
a.registerReceiver(receiver = new AudioBroadcastReceiver(), filter); //a is Activity
这段代码绝对有效 - 我查了一下。和接收器看起来是这样的:
class AudioBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
...
}
}
他们说,这是需要注册BroadcastReceiver
前动态给予特殊权限的应用程序。但我找不到 - 我应该要求什么Manifest.permission.
?对于这种情况。当玩家改变音乐曲目时,我只想接收信号。什么是危险在这?
这些是没有记录的,不受支持的广播。对于任何Android设备版本,没有任何设备需要发送它们的应用程序。 – CommonsWare
但是应用程序肯定会播放那些广播。棉花糖只是不提供它们。或者不注册过滤器。我认为这是一个BUG。操作系统必须传送任何应用程序发送的每个信号 - 它可以是其他应用程序部分的“内部”信号。 – Gourmand
“但是,应用程序肯定会播放这些广播节目” - 而你的证据是,究竟是什么?你有没有试过自己发送它们,比如通过'adb shell am'? – CommonsWare