В чем смысл android.intent.action.MAIN?

86

Я видел так много разных сбивающих с толку объяснений ...

<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" />
Геро
источник

Ответы:

74

android.intent.action.MAIN означает, что это действие является точкой входа в приложение, т.е. когда вы запускаете приложение, это действие создается.

Из документов

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

Также отсюда

Действие Действие Начало в качестве основной точки входа, не ожидает получения данных.

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

android.intent.category.LAUNCHER

категория - дает дополнительную информацию о действии, которое нужно выполнить.

CATEGORY_LAUNCHER означает, что он должен отображаться в 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
94

ACTION_MAINсчитается точкой входа для приложения. Обычно он сочетается с CATEGORY_LAUNCHERin, <intent-filter>чтобы указать действие, которое должно появиться в средстве запуска на главном экране или во всем остальном, что считает себя средством запуска. Такие «пусковые установки» могут запрашивать PackageManager, использовать queryIntentActivities(), чтобы находить такие действия и отображать их пользователю.

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

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

CommonsWare
источник
1
проголосовали! Я знал, что вы ответите на это, и ждал, чтобы прочитать, как и ожидалось, ясный и краткий ответ. спасибо
Spurdow 09
6
Хм, вы все еще не объяснили, зачем нам и то, и другое. Я имею в виду, ГЛАВНОЕ ДЕЙСТВИЕ = ТОЧКА ВХОДА, понятно. CATEGORY_LAUCHER = Чтобы указать, что действие должно появиться в панели запуска главного экрана. Эти два предложения одинаковы, только сформулированы по-разному, не так ли?
Пт
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 (intent)» - только если вы пишете свой собственный домашний экран с помощью собственной программы запуска, которая предлагает такого рода возможности. Поведение средства запуска домашнего экрана зависит от разработчиков этого домашнего экрана. Большинство из них сосредоточены на запуске рекламируемых запускаемых действий, поскольку это основная роль модуля запуска. Вы можете иметь действие, которое вызывает 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/

Shubhamhackz
источник