web-dev-qa-db-fra.com

Est-il possible de définir un récepteur de diffusion en tant que classe interne dans un fichier manifeste?

Je veux 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 un fichier XML manifeste, car Android ne le trouve pas.

Code:

public class MyActivity extends Activity{
    ...

    public class Receiver extends BroadcastReceiver{

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

    }

    ...
}

Manifeste:

<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 $ Receiver
  • org.danizmax.myapp.MyActivity $ Receiver
  • .MyActivity $ Receiver
  • .Destinataire

J'ai vu que d'autres avaient également des problèmes similaires, mais je n'ai trouvé aucune réponse.

Est-ce donc possible? Sinon, quelle est la meilleure façon d'utiliser les récepteurs de diffusion?

Merci!

41
danizmax

Oui c'est possible.

L'attribut récepteur Android: nom doit ressembler à .path.to.class.MyClass$MyInnerClass

72
Cheryl Simon

Si vous le souhaitez avec une classe interne non statique , vous ne pouvez pas le faire via AndroidManifest.xml. Vous pouvez cependant enregistrer dynamiquement le BroadcastReceiver: Receiver comme classe interne dans Android

12
Bert Regelink