2012-12-10 2 views
1

J'ai 2 applications, App1 et App2Invoke BroadcastReceiver personnalisé pour une autre application

Dans App1, fichier manifeste a BroadcastReceiverIncoming défini comme ci-dessous.

<receiver android:name="packagename.BroadcastReceiverIncoming" 
      android:enabled="true" 
      android:exported="true"> 
    <intent-filter> 
     <action android:name="packagename.BroadcastReceiverIncoming" /> 
    </intent-filter> 
</receiver> 

BroadcastReceiverIncoming est défini dans App1.

Maintenant dans App2, j'appelle ceci pour invoquer le récepteur de diffusion mais cela fonctionne maintenant d'une manière ou d'une autre?

Intent intent = new Intent(); 
intent.setClassName("packageName", "packagename.BroadcastReceiverIncoming"); 
intent.setAction("packagename.BroadcastReceiverIncoming"); 
appContext.sendBroadcast(intent); 

Même avec la ligne 2 a commenté/décommentée, il n'invoque pas BroadcastReceiverIncoming.

Par l'intermédiaire d'adb si j'appelle adb shell am broadcast -n packageName/packagename.BroadcastReceiverIncoming BroadcastReceiverIncoming est invoqué correctement dans App1.

Répondre

1

Je possède ce travail comme ci-dessous:

myServiceReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context ctx, Intent data) { 
      if (data.getAction().equals(POLayer.SVC_INTENT)) { 
       final String alias = data.getStringExtra("alias"); 
       final String command = data.getStringExtra("action"); 
       if (command.equals("dosomething")) { 
        new DoSomethingTask().execute(alias); 
       } 
          } 
        } 
      }; 

    .... 

    onCreate: 
    final IntentFilter filter = new IntentFilter(POLayer.SVC_INTENT); 
    filter.addAction(POLayer.ANOTHER_INTENT); 
    this.registerReceiver(this.myServiceReceiver, filter); 

Dans l'expéditeur:

   Intent i = new Intent(); 
       i.setAction(SVC_INTENT); 
       i.putExtra("alias", theAlias); 
       i.putExtra("action", "dosomething"); 
       this.sendBroadcast(i); 

La seule différence que je vois est que je ne suis pas compter sur les noms de paquets/composants, mais plutôt définir mes propres ACTION. En outre, tous les noms sont sensibles à la casse, vous pouvez donc vérifier sur nom_package vs nom_package.

+0

Je parle spécifiquement d'invoquer le récepteur de diffusion personnalisé dans une autre application. – Awesome

+0

Et j'ai posté du code spécifiquement vous montrant comment je fais cela. L'expéditeur et le destinataire sont dans deux packages/applications différents. – 323go

+0

Merci, Au lieu d'enregistrer le récepteur via registerReceiver, je l'ai déclaré dans le manifeste. Devrait-il invoquer Receiver automatiquement? – Awesome

Questions connexes