Qual è il significato di android.intent.action.MAIN?


86

Ho visto così tante diverse spiegazioni confuse ..

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

Qual è il significato di

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

e

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

e

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

Risposte:


74

android.intent.action.MAIN significa che questa attività è il punto di ingresso dell'applicazione, ovvero quando si avvia l'applicazione, viene creata questa attività.

Dai documenti

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

Inoltre, da qui

Attività Azione Inizia come punto di ingresso principale, non prevede di ricevere dati.

android.intent.category.DEFAULT viene utilizzato principalmente per gli intenti impliciti. Se la tua attività desidera essere avviata con un intento implicito, dovrebbe includere questa categoria nel suo filtro. Se la tua attività potrebbe essere avviata da un intento implicito quando non è assegnata alcuna categoria specifica, il suo filtro intenzione dovrebbe includere questa categoria.

android.intent.category.LAUNCHER

categoria - Fornisce informazioni aggiuntive sull'azione da eseguire.

CATEGORY_LAUNCHER significa che dovrebbe apparire nel Launcher come applicazione di primo livello

Vedi i documenti ..

  1. http://developer.android.com/reference/android/content/Intent.html
  2. http://developer.android.com/guide/topics/manifest/action-element.html

3
No, MAIN da solo non "inizierà l'attività a casa". MAINha molti usi.
CommonsWare

94

ACTION_MAINè considerato un punto di ingresso per l'applicazione. Di solito, si combina con CATEGORY_LAUNCHERin <intent-filter>per indicare un'attività che dovrebbe apparire nel programma di avvio della schermata iniziale o in qualsiasi altra cosa che si consideri un programma di avvio. Tali "lanciatori" possono interrogare PackageManager, usando queryIntentActivities(), per trovare tali attività e mostrarle all'utente.

Tuttavia, ACTION_MAINpuò essere utilizzato in combinazione con altre categorie per altri scopi specializzati. Ad esempio, CATEGORY_CAR_DOCKcon ACTION_MAINindica un'attività che dovrebbe essere considerata come candidata da mostrare quando l'utente lascia cadere il telefono in un dock per auto fornito dal produttore.

Quando Intentviene utilizzato con startActivity(), se Intentnon è già inserito in una categoria, viene inserito in CATEGORY_DEFAULT. Quindi, è <activity> <intent-filter>necessario specificarne alcuni <category> , utilizzando <category android:name="android.intent.category.DEFAULT" />se non altro.


1
votato! Sapevo che risponderai a questo e stavo aspettando di leggerlo come previsto una risposta chiara e concisa. grazie
Spurdow

6
Uhm, ancora non hai spiegato perché abbiamo bisogno di entrambi. Voglio dire, ACTION MAIN = ENTRY POINT, capito. CATEGORY_LAUCHER = Per indicare che un'attività dovrebbe apparire nel programma di avvio della schermata principale. Queste due frasi sono le stesse solo formulate in modo diverso, vero?
FRR

9
@feresr: No, non lo sono. Puoi dirlo leggendo la risposta, incluso il secondo paragrafo, che fornisce un esempio di un uso diversoACTION_MAIN che non coinvolge un launcher in stile home screen.
CommonsWare

2
@ vgokul129: Perché lanciatori schermata iniziale esaminare in modo specifico per le attività che hanno un <intent-filter>sia con <action android:name="android.intent.action.MAIN" />e <category android:name="android.intent.category.LAUNCHER" />.
CommonsWare

2
@ vgokul129: "Per essere precisi durante il clic sull'icona nel launcher, nessun startActivity (intent) dovrebbe chiamare" - solo se scrivi la tua schermata iniziale con il tuo launcher che offre questo tipo di funzionalità. Il comportamento di un lanciatore della schermata iniziale dipende dagli implementatori di quella schermata iniziale. La maggior parte si concentra sull'avvio di attività lanciabili pubblicizzate, poiché questo è il ruolo principale di un lanciatore. Sei libero di avere un'attività che chiama finish()subito, ma gli utenti penseranno che la tua app non funziona.
CommonsWare

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

È l'attività principale per questa applicazione

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

È nella categoria LAUNCHER, il che significa che ottiene un'icona in tutto ciò che si considera un "launcher", come la schermata iniziale

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

La chiamata a startActivity () aggiungerà sempre la categoria DEFAULT se non viene specificata un'altra categoria.

In genere basta aggiungere android.intent.category.DEFAULTanche se hai altre categorie. Ciò garantirà che se Requesting Intent non fornisce alcuna categoria mentre si avvia l'intento utilizzando startActivity(intent), anche la tua attività di ricezione può ricevere quegli intent.

Fonte: The Busy Coders Guide to Android Development

https://commonsware.com/Android/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.