仅当应用未在后台运行时,才启动具有启动器活动的 NFC 意图应用



我正试图从系统检测到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

最新更新