2017-04-03 2 views
0

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?

+0

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

+0

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

+0

"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

Répondre

0

Vous utilisez des diffusions non documentées et non prises en charge. Certaines applications de joueurs peuvent les utiliser. D'autres pourraient ne pas. Différentes versions du même joueur peuvent ou ne peuvent pas les utiliser.

Ne partez pas du principe que le lecteur qui prend en charge ces diffusions est compatible avec un périphérique donné ou que le lecteur choisi par l'utilisateur prend en charge ces diffusions.