Jakie jest znaczenie android.intent.action.MAIN?


85

Widziałem wiele różnych mylących wyjaśnień.

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

Jakie jest znaczenie

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

i

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

i

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

Odpowiedzi:


73

android.intent.action.MAIN oznacza, że ​​ta aktywność jest punktem wejścia aplikacji, tzn. kiedy uruchamiasz aplikację, ta aktywność jest tworzona.

Z dokumentów

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

Również stąd

Działanie Działanie Rozpocznij jako główny punkt wejścia, nie oczekuje otrzymania danych.

android.intent.category.DEFAULT jest używany głównie do ukrytych intencji. Jeśli twoja aktywność chce być rozpoczęta z niejawnej intencji, powinna uwzględnić tę kategorię w swoim filtrze. Jeśli Twoja aktywność może zostać uruchomiona przez niejawną intencję, gdy nie jest do niej przypisana żadna konkretna kategoria, jej filtr zamiaru powinien uwzględniać tę kategorię.

android.intent.category.LAUNCHER

kategoria - podaje dodatkowe informacje o akcji do wykonania.

CATEGORY_LAUNCHER oznacza, że ​​powinien pojawić się w programie uruchamiającym jako aplikacja najwyższego poziomu

Zobacz dokumentację ...

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

3
Nie, MAIN sam nie „rozpocznie zajęć w domu”. MAINma wiele zastosowań.
CommonsWare

92

ACTION_MAINjest uważany za punkt wejścia do aplikacji. Zwykle łączy się z CATEGORY_LAUNCHERin an, <intent-filter>aby wskazać działanie, które powinno pojawić się w programie uruchamiającym ekranu głównego lub w czymkolwiek innym, co uważa się za program uruchamiający. Takie „wyrzutnie” mogą wyszukiwać PackageManager, za pomocą queryIntentActivities(), wyszukiwać takie działania i wyświetlać je użytkownikowi.

Jednak ACTION_MAINmoże być używany w połączeniu z innymi kategoriami do innych specjalistycznych celów. Na przykład znak CATEGORY_CAR_DOCKz ACTION_MAINwskazuje czynność, którą należy uznać za kandydata do pokazania, gdy użytkownik włoży telefon do samochodowej stacji dokującej dostarczonej przez producenta.

Gdy Intentużywany jest z startActivity(), jeśli Intentnie został jeszcze umieszczony w kategorii, zostanie umieszczony w CATEGORY_DEFAULT. W związku z tym <activity> <intent-filter>trzeba określić niektóre <category> , używając, <category android:name="android.intent.category.DEFAULT" />jeśli nic innego.


1
przegłosowano! Wiedziałem, że odpowiesz na to pytanie i czekałem na przeczytanie zgodnie z oczekiwaniami jasnej i zwięzłej odpowiedzi. dzięki
Spurdow

6
Uhm, nadal nie wyjaśniłeś, dlaczego potrzebujemy obu. Mam na myśli, AKCJA GŁÓWNY = PUNKT WEJŚCIA, rozumiem. CATEGORY_LAUCHER = Aby wskazać, że działanie powinno pojawić się w programie uruchamiającym na ekranie głównym. Te dwa zdania są takie same, ale inaczej sformułowane, prawda?
FRR

9
@feresr: Nie, nie są. Możesz to stwierdzić, czytając odpowiedź, w tym drugi akapit, który stanowi przykład innego zastosowania, ACTION_MAINktóre nie obejmuje programu uruchamiającego w stylu ekranu głównego.
CommonsWare

2
@ vgokul129: Ponieważ programy uruchamiające ekran główny szukają szczególnie działań, które mają <intent-filter>zarówno opcję, jak <action android:name="android.intent.action.MAIN" />i <category android:name="android.intent.category.LAUNCHER" />.
CommonsWare

2
@ vgokul129: „Aby być precyzyjnym podczas klikania ikony w programie uruchamiającym, nie powinno wywoływać startActivity (zamiar)” - tylko wtedy, gdy napiszesz własny ekran główny z własnym programem uruchamiającym, który oferuje tego rodzaju możliwości. Zachowanie programu uruchamiającego ekran główny zależy od implementacji tego ekranu głównego. Większość koncentruje się na rozpoczęciu reklamowanych działań, które można uruchomić, ponieważ jest to główna rola programu uruchamiającego. Możesz mieć aktywność, która zadzwoni finish()od razu, ale użytkownicy pomyślą, że Twoja aplikacja jest zepsuta.
CommonsWare

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

Jest głównym działaniem tej aplikacji

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

Znajduje się w kategorii LAUNCHER, co oznacza, że ​​otrzymuje ikonę we wszystkim, co uważa się za „program uruchamiający”, na przykład na ekranie głównym

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

Wywołanie metody startActivity () zawsze doda kategorię DEFAULT, jeśli żadna inna kategoria nie zostanie określona.

Generalnie po prostu dodaj, android.intent.category.DEFAULTnawet jeśli masz inne kategorie. To zagwarantuje, że jeśli Żądanie zamiaru nie zapewni żadnych kategorii podczas rozpoczynania zamiaru za pomocą startActivity(intent), wtedy Twoja Aktywność Otrzymująca może również otrzymać te intencje.

Źródło: The Busy Coders Guide to Android Development

https://commonsware.com/Android/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.