带有2个启动器图标的Android应用程序,具有单独的taskAffinity

时间:2015-07-10 13:07:17

标签: android android-activity android-launcher launchmode taskaffinity

我有2个启动器图标和2个不同活动的应用程序。清单文件如下所示:

....
    <activity
        android:name=".MyActivity"
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:taskAffinity="my.package.com.MyActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter>
    </activity>

    <activity
        android:name=".MySettings"
        android:label="@string/settings"
        android:icon="@mipmap/ic_launcher"
        android:taskAffinity="my.package.com.MySettings">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
....

我希望MyActivity成为安装后打开的默认屏幕,因此我使用了.category.DEFAULT

action.MAINcategory.LAUNCHER将显示两个单独的启动器图标(1个用于MyActivity,1个用于MySettings)。

问题:当我打开MyActivity时,MySettings屏幕也会被打开。我希望每个启动器图标仅打开其相应的Activity。我已经使用taskAffinity为每个Activity解决问题,但它没有用。我认为要使taskAffinity工作,必须以标志Intent.FLAG_ACTIVITY_NEW_TASK启动Activity,在我的情况下我不能(两者都是启动活动)。

我也尝试使用android:launchMode="singleTask",但它也没有用。

如何让每个启动器图标仅打开其活动?

更新抱歉,我意识到MyActivity无法打开MySettings,但似乎是这样。 MyActivity没有用户界面,因此显示的空白屏幕类似于MySettingstaskAffinity工作正确。我已将android:theme="@android:style/Theme.NoDisplay"添加到MyActivity以隐藏用户界面。

2 个答案:

答案 0 :(得分:0)

只需使用两个不同的图片即可启动您的应用。

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".MySettings"
        android:label="settings"
        android:icon="@drawable/ic_launcher2"
        android:taskAffinity="my.package.com.MySettings">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

答案 1 :(得分:0)

我解决了这个问题:

<activity
   android:name="andynaz.android.hyperfcalc.MainActivity"
   android:label="@string/app_name" >
   <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

<activity
   android:name="andynaz.android.hyperfcalc.MainActivity2"
   android:label="@string/app_name"
   android:icon="@mipmap/ic_launcher2">
   <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

我没有使用taskAffinity,但是我指出了Activity类的完全指定名称(除了使用2个不同的图像)。