What is the meaning of android.intent.action.MAIN?

AndroidAndroid IntentAndroid Activity

Android Problem Overview


I have seen so many different confusing explenations..

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

What is the meaning of

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

and

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

and

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

Android Solutions


Solution 1 - Android

ACTION_MAIN is considered an entry point for the application. Usually, it combines with CATEGORY_LAUNCHER in an <intent-filter> to indicate an activity that should appear in the home screen's launcher, or in anything else that considers itself to be a launcher. Such "launchers" can query PackageManager, using queryIntentActivities(), to find such activities and display them to the user.

However, ACTION_MAIN can be used in combination with other categories for other specialized purposes. For example, CATEGORY_CAR_DOCK with ACTION_MAIN indicates an activity that should be considered a candidate to be shown when the user drops their phone into a manufacturer-supplied car dock.

When an Intent is used with startActivity(), if the Intent is not already placed into a category, it is placed into CATEGORY_DEFAULT. Hence, an <activity> <intent-filter> needs to specify some <category>, using <category android:name="android.intent.category.DEFAULT" /> if nothing else.

Solution 2 - Android

android.intent.action.MAIN means that this activity is the entry point of the application, i.e. when you launch the application, this activity is created.

From the docs

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

Also,from here

> Activity Action Start as a main entry point, does not expect to > receive data.

android.intent.category.DEFAULT is mainly used for implicit intents. If your activity wishes to be started by an implicit intent it should include this catetory in its filter. If your Activity might be started by an implicit Intent when no specific category is assigned to it, its Intent filter should include this category.

android.intent.category.LAUNCHER

> category -- Gives additional information about the action to execute.

CATEGORY_LAUNCHER means it should appear in the Launcher as a top-level application

See the docs..

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

Solution 3 - Android

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

> Is the main activity for this application

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

> It is in the LAUNCHER category, meaning it gets an icon in anything > that thinks of itself as a “launcher”, such as the home screen

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

> The call to startActivity() will always add the DEFAULT category if > no other category is specified.

Generally just add android.intent.category.DEFAULT even if you have other Categories. This will guarantee that if Requesting Intent doesn't provide any Categories while starting the intent using startActivity(intent), then your Receiving Activity can also receive those Intents..

Source: The Busy Coders Guide to Android Development

https://commonsware.com/Android/

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGeroView Question on Stackoverflow
Solution 1 - AndroidCommonsWareView Answer on Stackoverflow
Solution 2 - AndroidLalView Answer on Stackoverflow
Solution 3 - AndroidShubhamhackzView Answer on Stackoverflow