web-dev-qa-db-fra.com

Que sont les filtres d'intention dans Android?

Dans mon Android, je voulais démarrer une activité 'B' à partir de l'activité initiale 'A'. J'ai créé des classes pour les deux. Cependant, lorsque j'utilise le code suivant pour démarrer B, j'obtiens une erreur d'exécution: application has stopped unexpectedly, try again. Voici mon code:

Intent myIntent = new Intent(this, AddNewActivity.class);
startActivity(myIntent); 

Lorsque j'ai ajouté une nouvelle entrée dans AndroidManifest.xml/manifest/application/activity/intent-filers pour l'activité B alors l'application a fonctionné.

J'ai deux questions:

  • Lorsqu'il existe plusieurs entrées d'activités dans AndroidManifest.xml, comment Android sait-il quelle activité commencer en premier?
  • Je ne pouvais pas comprendre les filtres d'intention. Quelqu'un peut-il expliquer.

Voici mon partiel AndroidManifest.xml

<application Android:icon="@drawable/icon" Android:label="@string/app_name">
    <activity Android:name=".ListAllActivity"
              Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity Android:name=".AddNewActivity" Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
52
ankitjaininfo

Lorsqu'il existe plusieurs entrées d'activités dans AndroidManifest.xml, comment Android sait-il quelle activité commencer en premier?

Il n'y a pas de "premier". Dans votre cas, avec votre manifeste comme indiqué, vous aurez deux icônes dans votre lanceur. Celui sur lequel l'utilisateur appuie est celui qui est lancé.

Je ne pouvais pas comprendre les filtres d'intention. Quelqu'un peut-il expliquer.

Il y a pas mal de documentation sur le sujet . Veuillez envisager de lire cela, puis de poser des questions plus spécifiques.

En outre, lorsque vous obtenez "l'application s'est arrêtée de manière inattendue, réessayez", utilisez adb logcat, DDMS ou la perspective DDMS dans Eclipse pour examiner la trace de pile Java associée à l'erreur.

29
CommonsWare

Un filtre d'intention est une expression dans le fichier manifeste d'une application qui spécifie le type d'intentions que le composant souhaite recevoir.

Lorsque vous créez une intention implicite, le système Android Android recherche le composant approprié pour commencer en comparant le contenu de l'intention aux filtres d'intention déclarés dans le fichier manifeste d'autres applications sur l'appareil. Si le intention correspond à un filtre d'intention, le système démarre ce composant et lui fournit l'objet Intent.

AndroidManifest.xml

<activity Android:name=".HelloWorld"
    Android:label="@string/app_name">
    <intent-filter>
        <action Android:name="Android.intent.action.VIEW"/>
        <category Android:name="Android.intent.category.DEFAULT"/>
        <category Android:name="Android.intent.category.BROWSABLE"/>
        <data Android:scheme="http" Android:Host="androidium.org"/>
    </intent-filter>
</activity>

Lancer HelloWorld

Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse("http://androidium.org"));
startActivity(intent);
66
santoshpatmca

Le Activity dont vous voulez qu'il soit le tout premier écran si votre application est ouverte, puis mentionnez-le comme LANCEUR dans la catégorie d'intention et les activités restantes mentionnent Par défaut dans la catégorie d'intention.

Par exemple: - Il y a 2 activités A et B
L'activité A est LAUNCHER alors faites-la comme LAUNCHER dans la catégorie d'intention et B est enfant pour l'activité A, faites-la donc par défaut.

<application Android:icon="@drawable/icon" Android:label="@string/app_name">
    <activity Android:name=".ListAllActivity"
              Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity Android:name=".AddNewActivity" Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>
2
Mahadevappa T

Modifiez d'abord le xml, marquez votre deuxième activité comme DEFAULT

<activity Android:name=".AddNewActivity" Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

Vous pouvez maintenant lancer cette activité à l'aide de la méthode StartActivity.

2
Excel Logix

Lorsque vous créez une intention implicite, le système Android Android recherche le composant approprié pour commencer en comparant le contenu de l'intention aux filtres d'intention déclarés dans le fichier manifeste d'autres applications sur l'appareil. Si le l'intention correspond à un filtre d'intention, le système démarre ce composant et lui fournit l'objet Intent. Si plusieurs filtres d'intention sont compatibles, le système affiche une boîte de dialogue afin que l'utilisateur puisse choisir l'application à utiliser.

Un filtre d'intention est une expression dans le fichier manifeste d'une application qui spécifie le type d'intentions que le composant souhaite recevoir. Par exemple, en déclarant un filtre d'intention pour une activité, vous permettez à d'autres applications de démarrer directement votre activité avec un certain type d'intention. De même, si vous ne déclarez aucun filtre d'intention pour une activité, il ne peut être démarré qu'avec une intention explicite.

Selon: Intentions et filtres d'intention

2
Michael Horojanski

Conservez le premier filtre d'intention avec les clés MAIN et LAUNCHER et ajoutez un autre comme ANY_NAME et DEFAULT.

Votre LAUNCHER sera l'activité A et DEFAULT sera votre activité B.

1
Prashant

Il ne peut y avoir deux lanceurs AFAIK. Logcat est un outil utile pour déboguer et vérifier l'état de l'application/machine à l'arrière. il sera automatique lors du passage d'une activité à une autre.

1
Saikat Biswas

le filtre d'intention est une expression présente dans le manifeste de votre application qui spécifie le type d'intentions que le composant doit recevoir. Si le composant n'a pas de filtre d'intention, il peut recevoir une intention explicite. Si le composant avec filtre reçoit alors l'intention à la fois implicite et explicite

1
Bajirang namade

Si possible, essayez cette solution instantanée:

Intent intent =new Intent(getApplicationBaseContext,second_Act.class);
StartActivity(intent);
0
Shiva-mamaa