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
しかし、アプリケーションは間違いなくそれらのブロードキャストを送信します。マシュマロだけでは届けません。または、フィルターを登録しません。私はこれがバグだと思う。 OSは、アプリケーションによって送信される各信号を配信する必要があります。これは、他のアプリケーション部品の「内部」信号になる可能性があります。 – Gourmand
「しかし、アプリケーションは間違いなくこれらの放送を通知します」 - これについてのあなたの証拠は、正確には何ですか?あなたは 'adb shell am 'のように自分で送信しようとしましたか? – CommonsWare