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:
AndroidManifest.xml
, comment Android sait-il quelle activité commencer en premier?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>
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.
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);
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>
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.
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.
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.
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.
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
Si possible, essayez cette solution instantanée:
Intent intent =new Intent(getApplicationBaseContext,second_Act.class);
StartActivity(intent);