【问题标题】:Can't get NDEF_DISCOVERED action when opening the application with NFC tag使用 NFC 标签打开应用程序时无法获得 NDEF_DISCOVERED 操作
【发布时间】:2020-03-12 16:19:41
【问题描述】:

所以我编写了一个 NFC 标签来启动我目前正在开发的应用程序。我使用以下服务来做到这一点: https://play.google.com/store/apps/details?id=com.wakdev.wdnfc&hl=en

我想要做的是每当 NFC 标签打开我的应用程序时从一个活动切换到另一个活动。

在我的 AndroidManifest.xml 的清单标签下,我有:

<uses-permission android:name="android.permission.NFC" /> <uses-sdk android:minSdkVersion="10"/> <uses-feature android:name="android.hardware.nfc" android:required="true" />

我的 MainActivity 看起来像这样:

<activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </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>

由于NFC标签先打开MainActivity,我想看看它是否被NFC打开了。如果有,请切换到另一个活动。

问题是getIntent().getAction() 总是返回android.intent.action.MAIN,而我期待android.nfc.action.NDEF_DISCOVERED

目前我正在使用以下代码在onResume() 方法下执行此检查(基本上是调试):

@Override
protected void onResume() {
    super.onResume();
    System.out.println(getIntent().getAction());
}

我已经尝试在onCreate()onStart() 方法下执行此检查。他们都返回android.intent.action.MAIN 结果,而我期望android.nfc.action.NDEF_DISCOVERED

我是 Android 开发的新手,我只是想为一个小型原型制作这项工作。如果你们能帮助我,将不胜感激!

编辑:我搞定了!我对这个问题进行了很多研究,我相信我的 NFC 标签需要一些额外的文本/纯文本类型的数据(我之前也没有指定这个 mimeType,所以它似乎是强制性的)。我还在尝试调试应用程序时将 NDEF_DISCOVERED 置于 LAUNCHER 类别下,然后将其更改回 DEFAULT。我终于得到了我想要的结果!

【问题讨论】:

    标签: java android nfc


    【解决方案1】:

    getIntent() 返回用于创建活动的Intent。在您的情况下,这是主屏幕启动器Intent

    当您扫描 NFC 标签时,一个新的Intent 将被传送到该活动。 Intent 被传递给您可以覆盖的 onNewIntent() 方法。

    根据您的活动的使用方式,您可能需要处理这两种情况:

    • 用户通过扫描 NFC 标签启动您的应用程序的位置,因此您的活动是使用 NDEF Intent 创建的
    • 用户在扫描 NFC 标签之前通过其他方式启动了您的应用程序,因此您的活动是使用其他一些 Intent 创建的,并且您在 onNewIntent() 中获得了 NDEF Intent

    【讨论】:

    • 似乎我在我的意图过滤器标签下丢失了一些信息,特别是 mimeType,以及我的 NFC 中的一些随机文本/纯文本数据。在修复这些问题之前,我尝试使用 onNewIntent() 并且效果不佳。无论如何感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2018-01-20
    • 2022-01-22
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多