如何使多个intent过滤器在同一任务中启动一个活动

时间:2012-10-24 10:37:12

标签: android android-activity android-manifest android-lifecycle

我有两个针对我的应用程序的根活动的intent过滤器

<activity
    android:name=".MyActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Dialog" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <data android:mimeType="application/com.example.package" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

一个过滤器用于从启动器图标启动应用程序,另一个用于在用户触摸NFC标签时启动活动。

我希望当用户从应用程序中的任何活动按下HOME按钮时,下次他按下启动器图标或触摸NFC标签时,应用程序必须恢复(就像每个应用程序一样)。

但这就是发生的事情: 当用户点击NFC标签时,将启动第一个活动。然后他开始进行进一步的活动。按下HOME。再次点击NFC标签,启动第一个活动(MyActivity),并清除先前的堆栈。

另一方面, 当用户选择启动器图标时,导航到其他活动,按HOME,然后再次按下启动器图标,MyActivity将作为堆栈顶部的新活动启动。 (现在堆栈中有两个MyActivities。)

1 个答案:

答案 0 :(得分:3)

您需要定义活动的启动方式。 如果您希望自己的活动始终在同一任务上启动,请使用:android:alwaysRetainTaskState="true"android:taskAffinity="your.task.name"

另请查看android:launchMode="singleTop"android:launchMode="singleTask",以进一步了解活动的启动方式。