NFC intent 仅当应用不在后台 运行 时才使用启动器 activity 启动应用
NFC intent launch app with launcher activity only if the app isn't running in background
我正在尝试从系统检测到 NFC 标签时出现的 NFC 应用程序选择器对话框打开我的应用程序。我的应用出现在选择器对话框中。
案例一:
当应用程序 运行 在后台时。
在 NFC 标签检测中,将背景 activity(任务中的顶部 activity)置于前景。
问题
我需要在清单文件中指定哪个 activity 处理来自系统的 nfc 意图。因此,当用户从应用程序选择器中选择我的应用程序时,系统会启动指定 activity。而不是将背景 activity 放在前面。
案例二:
当应用程序不是 运行 带有启动器的午餐应用程序时 activity。
问题
为此,我需要在清单文件中将启动器屏幕指定为 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
但没有得到解决方案。
我通过将以下代码添加到启动器 activity 的 onCreate()
中解决了我的问题。我为启动器 activity 保留了相同的意图过滤器和元数据。这里的技巧是检查应用程序任务是否已经 运行 进入系统。
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
以上代码将检查应用程序任务是否已经 运行。如果它 运行 则启动器 activity 将自行关闭并将最重要的 activity 任务带到最前面。
参考:
https://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode
我正在尝试从系统检测到 NFC 标签时出现的 NFC 应用程序选择器对话框打开我的应用程序。我的应用出现在选择器对话框中。
案例一:
当应用程序 运行 在后台时。 在 NFC 标签检测中,将背景 activity(任务中的顶部 activity)置于前景。
问题
我需要在清单文件中指定哪个 activity 处理来自系统的 nfc 意图。因此,当用户从应用程序选择器中选择我的应用程序时,系统会启动指定 activity。而不是将背景 activity 放在前面。
案例二:
当应用程序不是 运行 带有启动器的午餐应用程序时 activity。
问题
为此,我需要在清单文件中将启动器屏幕指定为 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
但没有得到解决方案。
我通过将以下代码添加到启动器 activity 的 onCreate()
中解决了我的问题。我为启动器 activity 保留了相同的意图过滤器和元数据。这里的技巧是检查应用程序任务是否已经 运行 进入系统。
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
以上代码将检查应用程序任务是否已经 运行。如果它 运行 则启动器 activity 将自行关闭并将最重要的 activity 任务带到最前面。
参考:
https://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode