Was bedeutet android.intent.action.MAIN?

83

Ich habe so viele verschiedene verwirrende Erklärungen gesehen.

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

Was ist die Bedeutung von

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

und

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

und

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

Antworten:

72

android.intent.action.MAIN bedeutet, dass diese Aktivität der Einstiegspunkt der Anwendung ist, dh wenn Sie die Anwendung starten, wird diese Aktivität erstellt.

Aus den Dokumenten

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

Auch von hier aus

Aktivität Aktion Start als Haupteinstiegspunkt, erwartet keinen Datenempfang.

android.intent.category.DEFAULT wird hauptsächlich für implizite Absichten verwendet. Wenn Ihre Aktivität mit einer impliziten Absicht gestartet werden soll, sollte diese Kategorie in den Filter aufgenommen werden. Wenn Ihre Aktivität möglicherweise von einer impliziten Absicht gestartet wird, wenn ihr keine bestimmte Kategorie zugewiesen ist, sollte der Intent-Filter diese Kategorie enthalten.

android.intent.category.LAUNCHER

Kategorie - Gibt zusätzliche Informationen zu der auszuführenden Aktion.

CATEGORY_LAUNCHER bedeutet, dass es im Launcher als Anwendung der obersten Ebene angezeigt werden sollte

Siehe die Dokumente ..

  1. http://developer.android.com/reference/android/content/Intent.html
  2. http://developer.android.com/guide/topics/manifest/action-element.html
Lal
quelle
3
Nein, MAIN allein wird nicht "die Aktivität nach Hause starten". MAINhat viele Verwendungszwecke.
CommonsWare
91

ACTION_MAINwird als Einstiegspunkt für die Anwendung angesehen. Normalerweise wird es mit CATEGORY_LAUNCHERin kombiniert <intent-filter>, um eine Aktivität anzuzeigen, die im Startbildschirm des Startbildschirms oder in einem anderen Element angezeigt werden soll, das sich selbst als Startprogramm betrachtet. Solche "Starter" können solche Aktivitäten abfragen PackageManager, um sie queryIntentActivities()zu finden und dem Benutzer anzuzeigen.

Allerdings ACTION_MAINkann mit anderen Kategorien für andere spezielle Zwecke in Kombination verwendet werden. Zum Beispiel CATEGORY_CAR_DOCKmit ACTION_MAINzeigt eine Aktivität , die einen Kandidaten in Betracht gezogen werden sollte gezeigt werden , wenn der Benutzer sein Handy in ein vom Hersteller gelieferten Auto Dock fällt.

Wenn ein Intentverwendet wird mit startActivity(), wenn das Intentnicht bereits in einer Kategorie platziert ist, wird es in platziert CATEGORY_DEFAULT. Daher <activity> <intent-filter>muss man einige angeben <category>, <category android:name="android.intent.category.DEFAULT" />wenn nichts anderes.

CommonsWare
quelle
1
upvoted! Ich wusste, dass Sie darauf antworten werden, und ich habe darauf gewartet, wie erwartet eine klare und präzise Antwort zu lesen. danke
Spurdow
6
Ähm, du hast immer noch nicht erklärt, warum wir beide brauchen. Ich meine, ACTION MAIN = ENTRY POINT, verstanden. CATEGORY_LAUCHER = Um anzuzeigen, dass eine Aktivität im Launcher des Startbildschirms angezeigt werden soll. Diese zwei Sätze sind gleich, nur unterschiedlich formuliert, nicht wahr?
FRR
9
@feresr: Nein, das sind sie nicht. Sie können dies erkennen, indem Sie die Antwort lesen, einschließlich des zweiten Absatzes, der ein Beispiel für eine andere Verwendung enthält ACTION_MAIN, bei der kein Launcher im Stil eines Startbildschirms verwendet wird.
CommonsWare
2
@ vgokul129: Weil für Aktivitäten suchen speziell Home - Bildschirm Werfern , die eine haben <intent-filter>mit den beiden <action android:name="android.intent.action.MAIN" />und <category android:name="android.intent.category.LAUNCHER" />.
CommonsWare
2
@ vgokul129: "Um genau zu sein, während ein Symbol im Launcher angeklickt wird, sollte keine startActivity (Absicht) aufgerufen werden" - nur wenn Sie Ihren eigenen Startbildschirm mit Ihrem eigenen Launcher schreiben, der diese Art von Funktion bietet. Das Verhalten eines Startbildschirms liegt bei den Implementierern dieses Startbildschirms. Die meisten konzentrieren sich darauf, beworbene startfähige Aktivitäten zu starten, da dies die Hauptrolle eines Launchers ist. Sie können gerne eine Aktivität durchführen, die finish()sofort aufgerufen wird, aber Benutzer werden denken, dass Ihre App kaputt ist.
CommonsWare
2
<action android:name="android.intent.action.MAIN"/>

Ist die Hauptaktivität für diese Anwendung

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

Es befindet sich in der Kategorie LAUNCHER, dh es wird ein Symbol in allem angezeigt, was sich selbst als „Launcher“ betrachtet, z. B. auf dem Startbildschirm

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

Der Aufruf von startActivity () fügt immer die Kategorie DEFAULT hinzu, wenn keine andere Kategorie angegeben ist.

Im Allgemeinen nur hinzufügen, android.intent.category.DEFAULTauch wenn Sie andere Kategorien haben. Dies garantiert, dass startActivity(intent)Ihre Empfangsaktivität auch diese Absichten empfangen kann , wenn das Anfordern von Absichten beim Starten der Absicht keine Kategorien bereitstellt .

Quelle: Der Busy Coders-Leitfaden zur Android-Entwicklung

https://commonsware.com/Android/

Shubhamhackz
quelle