Friday, January 20, 2012

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.



Thanks in advance.

3 comments:

  1. 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"

    ReplyDelete
  2. I think it's because of the "android.intent.action.MAIN" action, this worked for me :

    <application>
    <activity android:name=".MyActivityA" android:icon="@drawable/aicon" android:label="@string/app_name">
    <intent-filter>
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <activity android:name=".MyActivityB" android:icon="@drawable/bicon" android:label="@string/app_name">
    <intent-filter>
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>

    ReplyDelete
  3. 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>

    ReplyDelete