안드로이드 4에서 모두 잘 작동합니다. Android 6에서는 onReceive()
의 동적 등록 BroadcastReceiver
이 호출되지 않습니다. 나는이 코드로 수신기를 등록한다 :안드로이드 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
그러나 응용 프로그램은 확실히 이러한 브로드 캐스트를 보냅니다. 마시맬로는 그들을 배달하지 않습니다. 또는 필터를 등록하지 않습니다. 나는 이것이 벌레라고 생각한다. OS는 모든 애플리케이션에서 전송되는 각 신호를 전달해야하며 다른 애플리케이션 부품의 "내부"신호가 될 수 있습니다. – Gourmand
"하지만 그 응용 프로그램은 분명히 그 방송을 보냅니다"- 그리고 이것에 대한 당신의 증거는 무엇입니까? 'adb shell am '을 통해 직접 보내려고 했습니까? – CommonsWare