2017-04-03 36 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

您依賴未公開的,不受支持的廣播。某些播放器應用可能會使用這些應用其他人可能不會。同一個玩家的不同版本可能會或可能不會使用這些。

不要假定任何給定的設備都有支持這些廣播的播放器,或者用戶選擇的播放器將支持這些廣播。