web-dev-qa-db-fra.com

Démarrer l'activité à l'aide d'une action personnalisée

Je cherche à démarrer une activité dans mon application à l'aide d'une action personnalisée. J'ai trouvé quelques réponses mais tout ce que j'essaye jette Java.lang.RuntimeException disant Aucune activité trouvée pour gérer l'intention {act = com.example.foo.bar.YOUR_ACTION}.

Voici l'activité dans mon fichier manifeste:

<activity
    Android:name=".FeedbackActivity" >  
    <intent-filter>
        <action Android:name="com.example.foo.bar.YOUR_ACTION" />
    </intent-filter>
</activity>

Et voici comment je commence l'activité:

Intent intent = new Intent("com.example.foo.bar.YOUR_ACTION");
startActivity(intent);

Toute aide serait grandement appréciée.

39
Jason Crosby

Je pense que vous créez mal votre intention. Essayez comme ceci:

String CUSTOM_ACTION = "com.example.foo.bar.YOUR_ACTION";

//Intent i = new Intent(this, FeedBackActivity.class);  // <--- You might need to do it this way.
Intent i = new Intent();
i.setAction(CUSTOM_ACTION);

startActivity(i);
27
FoamyGuy

Je pense que ce dont vous avez besoin est d'ajouter une catégorie par défaut à votre filtre d'intention, par exemple.

<activity
    Android:name=".FeedbackActivity" >  
    <intent-filter>
        <action Android:name="com.example.foo.bar.YOUR_ACTION" />
        <category Android:name="Android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

voir cette réponse pour plus d'informations.

110
Maks

Ajoutez simplement une catégorie de filtre d'intention comme valeur par défaut.

L'intention implicite fonctionne parfaitement et dans de nombreux cas, il vaut mieux utiliser une intention implicite avec Intent-action pour appeler un service/une activité que d'utiliser un nom de classe.

Avant startActivty() / startService() avec le contexte approprié, vous pouvez utiliser cette méthode 'queryIntentActivities(Intent intent, int flags)' de la classe du gestionnaire de paquets.

Il aide le ActivityManager (responsable du lancement des activités) à vérifier si le système Android obtient une correspondance avec votre intention).

Si ce n'est pas le cas, il renvoie une liste taille 0 ou bien>.

Par cela, vous pouvez également vérifier si votre application reçoit l'appel, et dans ce cas, même si votre application n'est pas installée/a un problème, elle ne se bloquera pas mais lancera un avertissement dans le journal. Les utilisateurs n'auront pas de gros problèmes à part le fait que l'application ne soit pas lancée.

(les utilisateurs ne vous pardonneront jamais si l'application de la visite plante).

J'espère que cela vous aidera !!! Codage heureux. :)

1
Abhiroop Nandi Ray