2017-04-03 70 views
0

在Android 4中,所有工作都正常。在Android 6中,不会调用动态注册的BroadcastReceiveronReceive()。我用这个代码注册接收器: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.?对于这种情况。当玩家改变音乐曲目时,我只想接收信号。什么是危险在这?

+0

这些是没有记录的,不受支持的广播。对于任何Android设备版本,没有任何设备需要发送它们的应用程序。 – CommonsWare

+0

但是应用程序肯定会播放那些广播。棉花糖只是不提供它们。或者不注册过滤器。我认为这是一个BUG。操作系统必须传送任何应用程序发送的每个信号 - 它可以是其他应用程序部分的“内部”信号。 – Gourmand

+0

“但是,应用程序肯定会播放这些广播节目” - 而你的证据是,究竟是什么?你有没有试过自己发送它们,比如通过'adb shell am'? – CommonsWare

回答

0

您依赖未公开的,不受支持的广播。某些播放器应用可能会使用这些应用其他人可能不会。同一个玩家的不同版本可能会或可能不会使用这些。

不要假定任何给定的设备都有支持这些广播的播放器,或者用户选择的播放器将支持这些广播。