【问题标题】:NFC intent launch app with launcher activity only if the app isn't running in background仅当应用程序未在后台运行时,带有启动器活动的 NFC 意图启动应用程序
【发布时间】:2016-06-07 14:00:32
【问题描述】:

我正在尝试从系统检测到 NFC 标签时出现的 NFC 应用程序选择器对话框打开我的应用程序。我的应用出现在选择器对话框中。

案例一:

当应用程序在后台运行时。 在 NFC 标签检测中,将后台活动(任务中的顶级活动)带到前台。

问题

我需要在清单文件中指定哪个活动处理来自系统的 nfc 意图。因此,当用户从应用程序选择器中选择我的应用程序时,系统会启动该指定活动。而不是将后台活动带到最前面。

案例 2:

当应用程序没有通过它的启动器活动运行午餐应用程序时。

问题

为了实现这一点,我需要在清单文件中将启动器屏幕指定为 NFC 意图处理程序。通过这样做,我的应用程序将在案例 1 中失败!

AndoridManifest.xml sn-p

         <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,但没有得到解决方案。

【问题讨论】:

  • 你尝试什么?你能发布你的 AndroidMAifest 的一部分包含 NFC 吗?
  • @LaurentY 我从 AndroidManifest 添加了 sn-p。
  • 我认为的一个解决方案是创建没有 UI 的活动,然后检查应用程序任务。如果应用程序在后台运行,则将第二个顶级活动带到地面或启动应用程序!
  • 您的标签是特定的(来自您)或可能是市场上的任何标签?
  • 标签特定于我的应用程序。但是 Ndef 记录没有我的应用程序的包名。

标签: android android-intent nfc android-pendingintent


【解决方案1】:

我通过将以下代码添加到启动器活动的onCreate() 中解决了我的问题。我为启动器活动保持意图过滤器和元数据相同。这里的技巧是检查应用程序任务是否已经在系统中运行。

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
            finish();
            return;
}

以上代码将检查应用程序任务是否已在运行。如果它正在运行,那么启动器活动将关闭他自己并将最重要的任务活动带到前面。

参考:

https://stackoverflow.com/a/21022876/2465752 https://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多