1

j'ai une classe MyBroadcastReceiver mis en œuvre, et j'ai essayé d'enregistrer un récepteur de diffusion dans l'exécution avec:Quel est le problème avec mon récepteur de diffusion de registre?

String MY_ACTION = "DUMMY"; 
MyBroadcastReceiver receiver = new MyBroadcastReceiver(); 
IntentFilter intentFilter = new IntentFilter(MY_ACTION); 
Log.i(TAG, "intentFilter: " + intentFilter.getAction(0)); 
Intent intent = context.registerReceiver(receiver, intentFilter); 
Log.i(TAG, "intent returned after registering:" + intent); 
Intent queryIntent = new Intent(MY_ACTION); 
PackageManager pm = context.getPackageManager(); 
List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(queryIntent, 0); 
Log.i(TAG, "list of receivers:" + resolveInfos.toString()); 

j'ai couru une émission de la coquille adb:

am broadcast \ 
-n com.foo.foo.foo/.MyBroadcastReceiver \ 
-a DUMMY 

J'ai aussi quelques journal. i dans mon onReceive() (implémenté dans MyBroadcast Receiver).

public class MyBroadcastReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Log.i(TAG, "in Broadcasting Receiver anyway"); 
    if (intent != null) { 
    ... 
    } 
} 

}

Le résultat est:

  • le journal de intentFilter.getAction (0) donne la bonne action
  • le journal d'intention après l'enregistrement donne nulle
  • I eu la liste des destinataires vides du journal.
  • Et le OnReceive n'a jamais été entré (dans le journal que je pouvais voir que )

Je suppose qu'il ya des erreurs avec ma part de registre? Tous les conseils/conseils seront très appréciés !!

Répondre

0

Ce code:

Intent intent = context.registerReceiver(receiver, intentFilter); 

retournera null car elle ne retourne émissions "collantes". C'est correct, car vous n'envoyez pas une émission "collante".

Ce code:

List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(queryIntent, 0); 

doit retourner une liste vide parce que ce code ne retourne que BroadcastReceiver s qui ont été enregistrés dans le manifeste avec <receiver> balises, et ne retourne rien pour dynamiquement enregistré BroadcastReceiver s, que votre MyBroadcastReceiver est.

Je ne sais pas pourquoi onReceive() n'a pas été appelé. Veuillez poster votre code MyBroadcastReceiver. Je ne vois rien d'évident. Vous pouvez essayer cette commande adb à la place:

am broadcast -a DUMMY 

Vous pouvez aussi essayer d'ajouter

sendBroadcast(queryIntent); 

après ce code:

Intent queryIntent = new Intent(MY_ACTION); 

et voir si cela appelle votre onReceive().

+0

merci. J'ai mis à jour la question avec mon code de MyBroadcastReceiver. –

+0

Ajout d'une autre idée à la fin de ma réponse. Aussi, quel est le contexte dans votre code 'context.registerReceiver()'? Appelez-vous cela d'une «activité» ou un «service» ou quoi? –

+0

Le contexte est obtenu en utilisant context.getApplicationContext() et en boucle. –