如何在一个应用程序中获取多个图标以启动不同的活动?

时间:2010-07-17 05:40:39

标签: android android-manifest

我有两个活动的应用程序,我希望能够在启动器中显示两个图标,每个图标在应用程序中启动相应的活动。

具体来说,我想要一个图标来启动我的主应用程序,另一个图标来启动我的设置活动。这可能吗?

这是我到目前为止所尝试的内容:

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


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

这会创建两个启动器图标,但它们都运行我的主应用程序,而不是运行我的设置应用程序的第二个图标。我尝试过只有启动器类别,但后来我没有得到一个图标,所以看起来我也需要主要动作。

这是正确的方法还是我应该在清单中声明两个应用程序呢?

2 个答案:

答案 0 :(得分:59)

您需要做的是让您的设置活动在另一项任务中启动。您可以通过指定其任务关联来执行此操作。这是通过属性android:taskAffinity完成的。默认情况下,所有活动共享相同的任务关联,默认为清单中指定的主包。在您的设置活动中,您可以指定android:taskAffinity="your.own.package.SettingsTask"以使设置活动在其自己的任务中启动。

Extra documentation.

答案 1 :(得分:8)

你肯定会朝着正确的方向前进。这就是我所拥有的(截断,因为我在快速访问期间将所有活动都放在列表中):

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

我认为可能发生的事情是来自指定班级名称的行动元素的干扰。我很确定动作和类别需要引用常量。我不知道这会如何导致你所看到的,但你可以尝试删除它们。除此之外,你几乎拥有我拥有的东西。