我的应用程序中有两个活动具有相同的意图过滤器“android.nfc.action.NDEF_DISCOVERED”,是否有任何方式告诉活动programaticaly我想开始一个特定的活动,而不是选择哪个活动从发现ndef开始?更清楚的是,一个设备正在运行Activity1而第二个设备正在运行Activity2,每当我从一个设备或另一个设备发出光束时,设备就会问我要启动哪个活动,因为它们都具有相同的intent过滤器。
这是我的清单:
<activity
android:label="@string/app_name"
android:name=".Activity1"
android:screenOrientation="portrait"
>
<intent-filter >
<action android:name="com.example.activity1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<activity
android:label="@string/app_name"
android:name=".Activity2"
android:screenOrientation="portrait"
>
<intent-filter >
<action android:name="com.example.activity2" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
答案 0 :(得分:5)
创建第三个不可见的活动(例如,RedirectorActivity
),没有任何布局和NoDisplay
主题(android:theme="@android:style/Theme.NoDisplay"
),并从最近(android:excludeFromRecents="true"
)中排除。仅将intent-filter
分配给单个活动单独(从其他人移除过滤器!)并在onCreate()
RedirectorActivity
的{{1}}中添加所有必要的逻辑以启动右侧来自Activity
的常规startActivity()
。最后用finish()
杀死RedirectorActivity,你就完成了。
答案 1 :(得分:0)
如果您希望将当前正在运行的活动优先于另一个,则应使用NFC前台调度系统。见Advanced NFC: Using the NFC Foreground Dispatch System。 (另见question。)
此外,您可能需要考虑您的应用程序是否有意义使用不同类型的NDEF记录来启动您的两个活动。在这种情况下,发件人可以决定应该开始哪个活动。