Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Two launcher activities

I have two activities marked with intent filter

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.package" android:versionCode="1" android:versionName="1.0" >  <uses-sdk android:minSdkVersion="7" />  <application     android:name=".MyApp"     android:icon="@drawable/ic_launcher"     android:label="@string/app_name" >      <!-- work order activity -->     <activity         android:name=".app.WorkOrderActivity"         android:label="@string/work_order"         android:taskAffinity="com.package.task_for_work_order_activity" >         <intent-filter>             <action android:name="android.intent.action.MAIN" />              <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>     </activity>      <!-- inventory activity -->     <activity         android:name=".app.InventoryActivity"         android:label="@string/inventory"         android:taskAffinity="com.package.task_for_inventory_activity" >         <intent-filter>             <action android:name="android.intent.action.MAIN" />              <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>     </activity> </application> 

The problem is, that when I'm installing apk file, there is no activity shown, because, as I understood system can't specify what activity should be shown.

I just really need two activities shown in launcher, so please don't give advice about removing intent-filters from second activity, or if you do so provide me another way to show two icons in launcher.

like image 815
Orest Avatar asked Jan 19 '12 14:01

Orest


People also ask

Can we have two launcher activities?

On latest Android versions - If there are more than one launcher activities and if we don't put this category tag then the activity which is mentioned first in the Android manifest file will get launched as start-up activity.

What is a launcher activity?

Launcher Activities are the activities that can be launched for a given intent. For example, when you press an app icon on the home screen, the StartActivity intent starts the activity you have specified as the launcher activity.

Can I have multiple launchers Android?

Yes, You can have more than one launcher activity in your application. This will not create any kind of compile-time or run time error. You will find two launcher logos of your application in your device can launch different activities as we defined in manifest.

What is category launcher?

category -- Gives additional information about the action to execute. For example, CATEGORY_LAUNCHER means it should appear in the Launcher as a top-level application, while CATEGORY_ALTERNATIVE means it should be included in a list of alternative actions the user can perform on a piece of data.


2 Answers

You need to specify which activity is the default one by adding the following line to your intent-filter:

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

Insert this in the default activity and keep the rest. Then it should work.

You may also want to add a different icon to your 2nd activity with the attribute android:icon="@drawable/myothericon"

like image 169
Mark Gjøl Avatar answered Oct 05 '22 10:10

Mark Gjøl


Add <action> items with android:name attributes defined to both intent filters:

<application     android:name=".MyApp"     android:icon="@drawable/ic_launcher"     android:label="@string/app_name" >      <!-- work order activity -->     <activity         android:name=".app.WorkOrderActivity"         android:label="@string/work_order"         android:taskAffinity="com.package.task_for_work_order_activity" >         <intent-filter>             <action android:name="android.intent.action.MAIN" />             <action android:name=".app.WorkOrderActivity"/>             <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>     </activity>      <!-- inventory activity -->     <activity         android:name=".app.InventoryActivity"         android:label="@string/inventory"         android:taskAffinity="com.package.task_for_inventory_activity" >         <intent-filter>             <action android:name="android.intent.action.MAIN" />             <action android:name=".app.InventoryActivity"/>             <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>     </activity> </application> 
like image 32
a.ch. Avatar answered Oct 05 '22 09:10

a.ch.