我正试图从系统检测到NFC标签时出现的NFC应用程序选择器对话框打开我的应用程序。我的应用程序出现在选择器对话框中。
情况1:
当应用程序在后台运行时。在NFC标签检测中,将背景活动(任务中的顶部活动)带到前台。
问题
我需要在清单文件中指定哪个活动处理来自系统的nfc意图。所以当用户从应用程序选择器中选择我的应用程序时,系统会启动指定的活动。而不是把背景活动放在最前面。
情况2:
当应用程序不运行午餐应用程序及其启动器活动时。
问题
为了实现这一点,我需要在清单文件中将启动器屏幕指定为NFC意图处理程序。如果这样做,我的应用程序将在情况1中失败!
AndoridManifest.xml片段
<activity android:name=".activityName" ...>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:category="android.intent.category.DEFAULT"
android:resource="@xml/nfc_tech_filter" />
</activity>
满足这两种情况的解决方案是什么?我试过使用ActivityManager
,但没有得到解决方案。
我通过在启动器活动的onCreate()
中添加以下代码来解决问题。我为启动器活动保留了相同的意图过滤器和元数据。这里的技巧是检查应用程序任务是否已经运行到系统中。
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
上面的代码将检查应用程序任务是否已经在运行。如果它正在运行,那么发射器活动将关闭他自己,并将把任务的最重要活动带到前面。
参考:
https://stackoverflow.com/a/21022876/2465752https://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode