Що означає android.intent.action.MAIN?


85

Я бачив стільки різних заплутаних висловлювань ..

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

Яке значення

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

і

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

і

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

Відповіді:


73

android.intent.action.MAIN означає, що ця діяльність є точкою входу програми, тобто при запуску програми ця діяльність створюється.

З документів

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

Крім того, звідси

Дія Дія Почати як основну точку входу, не очікує отримання даних.

android.intent.category.DEFAULT в основному використовується для неявних намірів. Якщо ваша діяльність хоче розпочатися з неявного наміру, вона повинна включити цю категорію у свій фільтр. Якщо ваша діяльність може бути запущена неявним наміром, коли їй не призначена конкретна категорія, її фільтр намірів повинен включати цю категорію.

android.intent.category.LAUNCHER

категорія - надає додаткову інформацію про дію, яку потрібно виконати.

CATEGORY_LAUNCHER означає, що він повинен з'являтися в панелі запуску як програма верхнього рівня

Перегляньте документи ..

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

3
Ні, MAIN поодинці не «почне діяльність додому». MAINмає багато застосувань.
CommonsWare

92

ACTION_MAINвважається точкою входу для заявки. Зазвичай він поєднується з CATEGORY_LAUNCHERin, <intent-filter>щоб вказати діяльність, яка повинна з'являтися в панелі запуску головного екрану, або в будь-якому іншому, що вважає себе пусковою установкою. Такі "пускові установки" можуть запитувати PackageManager, використовуючи queryIntentActivities(), щоб знайти такі дії та показати їх користувачеві.

Однак ACTION_MAINможе використовуватися в поєднанні з іншими категоріями для інших спеціалізованих цілей. Наприклад, CATEGORY_CAR_DOCKз ACTION_MAINвказує діяльність, яку слід вважати кандидатом на показ, коли користувач кидає свій телефон у автомобільну док-станцію, що постачається виробником.

Коли an Intentвикористовується з startActivity(), якщо його Intentще не внесено до категорії, він поміщений у CATEGORY_DEFAULT. Отже, <activity> <intent-filter>потрібно вказати деякі <category> , використовуючи, <category android:name="android.intent.category.DEFAULT" />якщо нічого іншого.


1
проголосував! Я знав, що ви відповісте на це, і я чекав, щоб прочитати його, як очікувалося, чітку та стислу відповідь. спасибі
Spurdow

6
Е-е, ви все ще не пояснили, навіщо нам обоє. Я маю на увазі, ACTION MAIN = ENTRY POINT, зрозумів. CATEGORY_LAUCHER = Щоб вказати, що діяльність повинна з'являтися в панелі запуску головного екрана. Ці два речення однакові, просто сформульовані по-різному, чи не так?
FRR

9
@feresr: Ні, вони не є. Ви можете сказати це, прочитавши відповідь, включаючи другий абзац, який наводить приклад іншого використання ACTION_MAIN, яке не стосується панелі запуску в стилі домашнього екрану.
CommonsWare

2
@ vgokul129: Оскільки панелі запуску головного екрану спеціально шукають дії, які мають як <intent-filter>обидва, так <action android:name="android.intent.action.MAIN" />і <category android:name="android.intent.category.LAUNCHER" />.
CommonsWare

2
@ vgokul129: "Якщо бути точним під час клацання піктограми в панелі запуску, жодна функція startActivity (намір) не повинна викликати" - лише якщо ви пишете власний домашній екран за допомогою власної панелі запуску, що пропонує такі можливості. Поведінка програми запуску головного екрана залежить від розробників цього головного екрану. Більшість зосереджується на запуску рекламованої запускової діяльності, оскільки це головна роль пускової установки. Ви можете finish()одразу ж зателефонувати , але користувачі подумають, що ваш додаток зламаний.
CommonsWare

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

Це основна діяльність цього додатка

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

Він входить до категорії LAUNCHER, тобто він отримує піктограму в будь-якому, що вважає себе «запусковим пристроєм», наприклад, на головному екрані

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

Виклик startActivity () завжди додасть категорію DEFAULT, якщо не вказана інша категорія.

Як правило, просто додайте, android.intent.category.DEFAULTнавіть якщо у вас є інші категорії. Це гарантуватиме, що якщо запит на намір не надає жодних категорій під час запуску використання наміру startActivity(intent), тоді ваша діяльність, яка отримує, також може отримати ці наміри.

Джерело: Довідник із зайнятих кодерів з розробки Android

https://commonsware.com/Android/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.