Android:使用NFC标签打开应用程序时无法获得NDEF_DISCOVERED操作

问题描述 投票:1回答:1

因此,我对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个回答
0
投票

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

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

取决于您使用活动的方式,您可能需要同时处理两种情况:

  • 用户通过扫描NFC标签启动您的应用的位置,因此您的活动是使用NDEF Intent创建的>
  • [用户在扫描NFC标签之前通过其他方式启动您的应用的位置,因此您的活动是通过其他Intent创建的,并且在Intent中得到了NDEF onNewIntent()
© www.soinside.com 2019 - 2024. All rights reserved.