¿Cuál es el significado de android.intent.action.MAIN?

85

He visto tantas expresiones confusas diferentes ...

<intent-filter>
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Cuál es el significado de

<action android:name="android.intent.action.MAIN" />

y

 <category android:name="android.intent.category.LAUNCHER" />

y

 <category android:name="android.intent.category.DEFAULT" />
Gero
fuente

Respuestas:

73

android.intent.action.MAIN significa que esta actividad es el punto de entrada de la aplicación, es decir, cuando inicia la aplicación, se crea esta actividad.

De los documentos

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

Además, desde aquí

Actividad Acción Iniciar como punto de entrada principal, no espera recibir datos.

android.intent.category.DEFAULT se usa principalmente para intenciones implícitas. Si su actividad desea iniciarse con una intención implícita, debe incluir esta categoría en su filtro. Si su actividad puede iniciarse con una intención implícita cuando no se le asigna una categoría específica, su filtro de intención debe incluir esta categoría.

android.intent.category.LAUNCHER

categoría: proporciona información adicional sobre la acción a ejecutar.

CATEGORY_LAUNCHER significa que debería aparecer en el Lanzador como una aplicación de nivel superior

Ver los documentos.

  1. http://developer.android.com/reference/android/content/Intent.html
  2. http://developer.android.com/guide/topics/manifest/action-element.html
Lal
fuente
3
No, por MAIN sí solo no "iniciará la actividad en casa". MAINtiene muchos usos.
CommonsWare
92

ACTION_MAINse considera un punto de entrada para la aplicación. Por lo general, se combina con CATEGORY_LAUNCHERin an <intent-filter>para indicar una actividad que debería aparecer en el lanzador de la pantalla de inicio, o en cualquier otra cosa que se considere un lanzador. Dichos "lanzadores" pueden consultar PackageManager, usar queryIntentActivities(), para encontrar tales actividades y mostrarlas al usuario.

Sin embargo, ACTION_MAINse puede utilizar en combinación con otras categorías para otros fines especializados. Por ejemplo, CATEGORY_CAR_DOCKcon ACTION_MAINindica una actividad que debería considerarse candidata a mostrarse cuando el usuario deja caer su teléfono en una base para automóvil proporcionada por el fabricante.

Cuando Intentse usa con startActivity(), si aún Intentno se ha colocado en una categoría, se coloca en CATEGORY_DEFAULT. Por lo tanto, an <activity> <intent-filter>necesita especificar algunos <category> , al menos usando <category android:name="android.intent.category.DEFAULT" />nada más.

CommonsWare
fuente
1
votado a favor! Sabía que vas a responder a esto y he estado esperando leerlo como esperaba una respuesta clara y concisa. gracias
Spurdow
6
Uhm, todavía no has explicado por qué necesitamos ambos. Quiero decir, ACCIÓN PRINCIPAL = PUNTO DE ENTRADA, lo tengo. CATEGORY_LAUCHER = Para indicar que una actividad debe aparecer en el lanzador de la pantalla de inicio. Estas dos oraciones son iguales, pero están redactadas de manera diferente, ¿no?
FRR
9
@feresr: No, no lo son. Puede saberlo leyendo la respuesta, incluido el segundo párrafo, que proporciona un ejemplo de un uso diferenteACTION_MAIN que no implica un lanzador de estilo de pantalla de inicio.
CommonsWare
2
@ vgokul129: Debido a los lanzadores de la pantalla de inicio buscan específicamente para las actividades que tienen un <intent-filter>tanto con <action android:name="android.intent.action.MAIN" />y <category android:name="android.intent.category.LAUNCHER" />.
CommonsWare
2
@ vgokul129: "Para ser precisos durante el clic del icono en el lanzador, no debe llamar a startActivity (intent)", solo si escribe su propia pantalla de inicio con su propio lanzador que ofrece este tipo de capacidad. El comportamiento de un lanzador de pantalla de inicio depende de los implementadores de esa pantalla de inicio. La mayoría se enfoca en iniciar actividades de lanzamiento anunciadas, ya que esa es la función principal de un lanzador. Puede tener una actividad que llame de finish()inmediato, pero los usuarios pensarán que su aplicación no funciona.
CommonsWare
2
<action android:name="android.intent.action.MAIN"/>

Es la actividad principal de esta aplicación.

 <category android:name="android.intent.category.LAUNCHER" />

Está en la categoría LANZADOR, lo que significa que tiene un ícono en todo lo que se considere un "lanzador", como la pantalla de inicio.

 <category android:name="android.intent.category.DEFAULT" />

La llamada a startActivity () siempre agregará la categoría DEFAULT si no se especifica ninguna otra categoría.

Por lo general, solo agregue android.intent.category.DEFAULTincluso si tiene otras categorías. Esto garantizará que si Requesting Intent no proporciona ninguna categoría al iniciar el uso de intent startActivity(intent), su Actividad de recepción también puede recibir esos Intents.

Fuente: The Busy Coders Guide to Android Development

https://commonsware.com/Android/

Shubhamhackz
fuente