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