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

しかし、アプリケーションは間違いなくそれらのブロードキャストを送信します。マシュマロだけでは届けません。または、フィルターを登録しません。私はこれがバグだと思う。 OSは、アプリケーションによって送信される各信号を配信する必要があります。これは、他のアプリケーション部品の「内部」信号になる可能性があります。 – Gourmand

+0

「しかし、アプリケーションは間違いなくこれらの放送を通知します」 - これについてのあなたの証拠は、正確には何ですか?あなたは 'adb shell am 'のように自分で送信しようとしましたか? – CommonsWare

答えて

0

文書化されていない、サポートされていないブロードキャストに依拠しています。一部のプレーヤーアプリでこれらを使用する場合があります。他はそうではないかもしれない。同じプレーヤーの異なるバージョンでこれらを使用する場合と使用しない場合があります。

特定のデバイスにこれらのブロードキャストをサポートするプレーヤーがあること、またはユーザーが選択したプレーヤーがこれらのブロードキャストをサポートするとは考えないでください。

関連する問題