2010-07-23 22 views
44

En mi aplicación de Android, quería comenzar una actividad 'B' desde la actividad inicial 'A'. Creé clases para ambos. Sin embargo, cuando uso el siguiente código para iniciar B, obtengo un error de tiempo de ejecución: application has stopped unexpectedly, try again. Aquí está mi código:¿Qué son los filtros de intención en Android?

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

Cuando he añadido una nueva entrada en AndroidManifest.xml/manifest/application/activity/intent-filers para la actividad B, entonces la aplicación funcionó.

Tengo dos preguntas:

  • Cuando hay varias entradas de actividades en AndroidManifest.xml, ¿cómo sabe androide qué actividad por primera vez?
  • No pude entender los filtros de intenciones. ¿Alguien puede explicarme?

Aquí es mi parcial 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> 

Respuesta

26

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

No hay una "primera". En su caso, con su manifiesto como se muestra, tendrá dos íconos en su iniciador. Cualquiera que toque el usuario es el que se lanza.

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

Hay bastante de documentation on the subject. Por favor, considere leer eso y luego haga preguntas más específicas.

Además, cuando obtiene "la aplicación se detuvo inesperadamente, intente de nuevo", use adb logcat, DDMS o la perspectiva DDMS en Eclipse para examinar el seguimiento de pila de Java asociado con el error.

+0

gracias. no sabía abt 'adb logcat'. – ankitjaininfo

+0

adb logcat suena como vintage. Gracias @CommonsWare por el apoyo – Killer

1

Guarde el primer filtro de intento con las claves MAIN y LAUNCHER y agregue otro como ANY_NAME y DEFAULT.

Su LAUNCHER habrá actividad A y DEFAULT habrá su actividad B.

1

No puede haber dos Lancher yo sepa. Logcat es una herramienta útil para depurar y verificar el estado de la aplicación/máquina en la parte posterior. será automático al cambiar de una actividad a otra.

2

Primer cambio del xml, marque su segunda actividad como 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> 

Ahora se puede iniciar esta actividad utilizando el método startActivity.

46

Un filtro de intención es una expresión en el archivo de manifiesto de una aplicación que especifica el tipo de intentos que el componente desea recibir.

Cuando crea una intención implícita, el sistema Android encuentra el componente apropiado para comenzar comparando los contenidos del intento con los filtros de intención declarados en el archivo de manifiesto de otras aplicaciones en el dispositivo. Si la intención coincide con un filtro de intención, el sistema inicia ese componente y lo entrega el objeto Intento.

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> 

lanzamiento HelloWorld

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

Simple. Explicación clara de lo que es un filtro de intención. Esto responde la pregunta en el título de este hilo. – Sparky1

1

El Activity el que hay que comer cuando se abre la aplicación mencionar como lanzador en la categoría intención y el resto de actividades mencionar defecto en la categoría intención.

Por ejemplo: - Hay 2 Actividad A y B
La actividad es un lanzador de modo que sea lo más LANZADOR en la categoría de intención y B es hijo de la actividad a lo que sea lo 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

También tenemos que darle a ambas actividades un nombre diferente @Mahadevappa T – cammando

2

Cuando se crea una intención implícita, el sistema Android se encuentra el componente apropiado para comenzar comparando el contenido de la intención de los filtros intención declarada en el archivo de manifiesto de otras aplicaciones en el dispositivo. Si la intención coincide con un filtro de intención, el sistema inicia ese componente y lo entrega el objeto Intento. Si los filtros de intención múltiple son compatibles, el sistema muestra un diálogo para que el usuario pueda elegir qué aplicación usar.

Un filtro de intención es una expresión en el archivo de manifiesto de una aplicación que especifica el tipo de intentos que el componente desea recibir. Por ejemplo, al declarar un filtro de intención para una actividad, usted hace posible que otras aplicaciones comiencen su actividad directamente con un cierto tipo de intención. Del mismo modo, si no declaras ningún filtro de intención para una actividad, solo se puede iniciar con un intento explícito.

según: Intents and Intent Filters

0

Si es posible tratar ésta solución inmediata:

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

filtro intención es la expresión que se presentan en el manifiesto en su aplicación que especifican el tipo de intentos que el componente esté recibiendo. Si el componente no tiene ningún filtro de intención, puede recibir un intento explícito. Si el componente con filtro recibe intenciones implícitas y explícitas

Cuestiones relacionadas