2010-07-23 4 views
44

Dans mon application android, je voulais démarrer une activité 'B' à partir de l'activité initiale 'A'. J'ai créé des classes pour les deux. Toutefois, lorsque vous utilisez le code suivant pour démarrer B, j'obtiens une erreur d'exécution: application has stopped unexpectedly, try again. Voici mon code:Quels sont les intentions-filtres dans Android?

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

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

J'ai deux questions:

  • Quand il y a des entrées multiples activités à AndroidManifest.xml, comment savoir Android quelle activité commencer?
  • Je ne pouvais pas comprendre les filtres d'intention. Quelqu'un peut-il expliquer s'il vous plaît.

Voici ma partie 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> 

Répondre

26

When there are multiple activities entries in AndroidManifest.xml, how does android know which activity to start first?

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

I could not understand intent-filters. Can anyone please explain.

Il y a un peu de documentation on the subject. S'il vous plaît, lisez ceci, puis posez des questions plus spécifiques. De même, 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 la pile Java associée à l'erreur.

+0

ooh merci. je ne savais pas abt 'adb logcat'. – ankitjaininfo

+0

adb logcat sonne comme vintage. Merci @CommonsWare pour le soutien – Killer

1

Conserver le premier filtre d'intention avec les touches MAIN et LAUNCHER et en ajouter un autre en tant que ANY_NAME et DEFAULT.

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

1

Il n'y a pas deux Lancher AFAIK. Logcat est un outil utile pour déboguer et vérifier l'état de l'application/machine dans le derrière. Ce sera automatique lors du passage d'une activité à une autre.

2

Premier changement du xml, marquez votre deuxième activité 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> 

Maintenant vous pouvez lancer cette activité en utilisant la méthode StartActivity.

46

Un filtre d'intention est une expression dans le fichier manifeste d'une application qui spécifie le type d'intention que le composant souhaite recevoir. Lorsque vous créez une intention implicite, le système Android trouve 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 le périphérique. Si l'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> 

Lancement HelloWorld

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

Simple. Explication claire de ce qu'est un filtre d'intention. Cela répond à la question dans le titre de ce fil. – Sparky1

1

Le Activity que vous devez déjeuner quand l'application ouvre le mentionner comme LANCEUR dans la catégorie intention et autres activités mention dans la catégorie Default intention.

Par exemple: - Il y a 2 activité A et B
L'activité A est LANCEUR donc faire comme LANCEUR dans la catégorie B est l'intention et l'enfant pour l'activité A pour faire DEFAULT.

<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> 
+0

Nous devons également donner à la fois le nom des différentes activités @Mahadevappa T – cammando

2

Lorsque vous créez une intention implicite, le système Android trouve le composant approprié pour commencer en comparant le contenu de l'intention des filtres intention déclarée dans le fichier manifeste d'autres applications sur l'appareil. Si 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'intention 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: Intents and Intent Filters

0

Si possible, essayez celui-ci une solution instantanée:

filtre intention
Intent intent =new Intent(getApplicationBaseContext,second_Act.class); 
StartActivity(intent); 
1

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

Questions connexes