2010-12-08 8 views
35

Je souhaite créer un récepteur de diffusion en tant que classe interne dans mon activité principale. Mais j'ai des problèmes pour définir le récepteur de diffusion dans le fichier xml manifeste, parce que Android ne peut pas le trouver.Est-il possible de définir un récepteur de diffusion en tant que classe interne dans un fichier manifeste?

code:

public class MyActivity extends Activity{ 
    ... 

    public class Receiver extends BroadcastReceiver{ 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      .... 
     } 

    } 

    ... 
} 

Manifest:

<receiver android:name=".org.danizmax.myapp.MyActivity$Receiver" android:enabled="true"> 
      <intent-filter> 
       <action android:name="org.danizmax.myapp.BROADCAST_INITIAL_DATA"></action> 
      </intent-filter> 
</receiver> 

J'ai essayé avec:

  • .org.danizmax.myapp.MyActivity $ Récepteur
  • org.danizmax.myapp .MyActivity $ Récepteur
  • .MyActivity $ Récepteur
  • .Récepteur

j'ai vu d'autres aussi avoir des problèmes similaires, mais n'a pas trouvé de réponses.

Alors, est-ce possible? Si non, quelle est la meilleure façon d'utiliser les récepteurs de radiodiffusion?

Merci!

+3

Essayez de créer votre classe interne Statique. En outre, quel attribut de package définissez-vous dans votre manifeste? Cela détermine le point de départ de votre android: nom sur le récepteur. –

+0

Ah cela fonctionne maintenant avec la classe statique et le nom du récepteur défini comme .MyActivity $ Receiver. Ajoutez votre commentaire sur le fait de rendre Static classe interne à votre première réponse afin que je puisse vous envoyer une certaine réputation. Merci! – danizmax

+0

Désolé, je n'ai pas vu votre commentaire .. vous êtes seulement averti des commentaires sur les questions si c'est votre question, ou si vous utilisez un @username au début du commentaire. –

Répondre

65

Oui, c'est possible.

Le récepteur Android: attribut name doit ressembler à .path.to.class.MyClass$MyInnerClass

+75

La classe interne doit être statique ... – danizmax

+0

Boom. Un grand merci pour cela :-) – Bear

+0

@danizmax vous êtes un génie! –

-2

La meilleure façon d'utiliser BroadcastReceiver s serait de faire sa propre classe. De cette façon, le code est mieux organisé et vous pouvez éventuellement le réutiliser.

+2

Pas si vous avez besoin d'appeler [une méthode dans votre activité principale] (http://stackoverflow.com/questions/15058743/how-do-i -register-dans-manifest-an-inner-media-bouton-broadcastreciver # comment21174031_15058783). Et pas dans [Jelly Bean] (http://stackoverflow.com/a/13576130/636571) ... – an00b

12

Si vous voulez faire cela avec une classe interne non statique , vous ne pouvez pas le faire via le AndroidManifest.xml. Vous pouvez cependant enregistrer dynamiquement le BroadcastReceiver: Receiver as inner class in Android

+1

Grande référence, mais cela ne fonctionnera pas pour les boutons de médias dans [Jelly Bean] (http://stackoverflow.com/a/13576130). – an00b

+0

Vous devez rendre la classe statique et publique pour que l'androïde instancie le récepteur de diffusion lorsqu'il est déclaré statiquement dans le fichier manifest.as android l'instancie, il doit être une classe statique sinon l'objet de classe externe devra également être instancié. – user2779311

Questions connexes