Dans Android 4 tout fonctionne très bien. Dans Android 6, le onReceive()
du BroadcastReceiver
enregistré dynamiquement n'est pas appelé. J'inscris le récepteur avec ce code:Android 6 ne s'enregistre pas BroadcastReceiver pour les événements musicaux
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
Ce code fonctionne vraiment - j'ai vérifié. Et récepteur ressemble à ceci:
class AudioBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
...
}
}
Ils disent qu'il est nécessaire de donner dynamiquement des autorisations spéciales à l'application avant de vous inscrire BroadcastReceiver
. Mais je ne peux pas trouver comment - que dois-je demander avec Manifest.permission.
? pour ce cas. Je veux juste recevoir des signaux lorsque le joueur change de piste musicale. Quel est dangereux dans ce?
Ce sont des diffusions non documentées non prises en charge. Il n'y a aucune exigence pour n'importe quel appareil d'avoir une application qui les envoie, pour n'importe quelle version d'Android. – CommonsWare
Mais l'application envoie définitivement ces émissions. Marshmallow ne les livre pas. Ou ne pas enregistrer le filtre. Je pense que c'est un BUG. L'OS doit délivrer chaque signal envoyé par n'importe quelle application - il peut s'agir d'un signal "interne" pour d'autres parties de l'application. – Gourmand
"Mais l'application envoie définitivement ces émissions" - et votre preuve de cela est, quoi, exactement? Avez-vous essayé de les envoyer vous-même, par exemple via 'adb shell am'? – CommonsWare