2013-01-06 4 views
0

J'ai essayé de trouver ce qui ne va pas ici pendant quelques heures. Pourquoi ce récepteur de diffusion ne reçoit pas l'intention?Récepteur de diffusion enregistré dynamiquement ne fonctionne pas

static class BReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     Toast.makeText(context, "Got the intent", Toast.LENGTH_LONG).show(); 
    } 

} 

@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mLayout = new FrameLayout(this); 
    setContentView(mLayout); 
    final IntentFilter intentFilter = new IntentFilter("com.example.testui.action"); 
    getApplicationContext().registerReceiver(new BReceiver(), intentFilter); 
    final Intent intent = new Intent(getApplicationContext(), BReceiver.class); 
    intent.setAction("com.example.testui.action"); 
    getApplicationContext().sendBroadcast(intent); 
} 

PS. Je n'ai pas défini ce destinataire dans un fichier manifeste, parce que, strictement parlant, ce n'est pas obligatoire.

Répondre

2

Essayez d'envoyer la diffusion de cette façon:

getApplicationContext().sendBroadcast(new Intent("com.example.testui.action")); 
+0

Oui, il a fait l'trcik. Pourriez-vous expliquer pourquoi cela n'a pas fonctionné sur mon chemin? – I4004

+0

Lorsque vous utilisez l'intention explicite (qui désigne le composant cible par son nom, 'new Intent (getApplicationContext(), BReceiver.class)') android ne regarde que les composants qui ont été ajoutés au AndroidManifest. Comme vous l'avez dit, votre récepteur n'a pas été ajouté. C'est pourquoi vous devez utiliser l'intention implicite (qui n'a qu'une action et une donnée mais pas un nom de composant). [Ici] (http://developer.android.com/guide/components/intents-filters.html) vous trouverez plus de détails sur le fonctionnement des filtres d'intention. –

Questions connexes