Java 使用NFC标记检测我的应用程序的问题

Java 使用NFC标记检测我的应用程序的问题,java,android,nfc,intentfilter,ndef,Java,Android,Nfc,Intentfilter,Ndef,我已经开发了一个应用程序,使用NFC功能,并得到了我的测试标签 及其特点 一切都很好 并在配置中添加以下行 <uses-feature android:name="android.hardware.nfc" android:required="false" /> <intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED"/>

我已经开发了一个应用程序,使用NFC功能,并得到了我的测试标签

及其特点

一切都很好

并在配置中添加以下行

<uses-feature android:name="android.hardware.nfc" android:required="false" />
             <intent-filter>
         <action android:name="android.nfc.action.TAG_DISCOVERED"/>
           <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
             <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>

我的问题是 同样,使用NFC标记编写器应用程序编辑它

我放了一条短信,然后我又开始使用我的应用程序,但不再出现在列表中

进行多次旋转,并能够重新出现在我的应用程序列表中格式化NFC标记

我做错了什么? 如果我没有提供足够的信息,请询问我。
非常感谢

您需要设置与标签类型匹配的适当意图过滤器。当前您正在使用

  • NDEFèU发现的意图过滤器不会在大多数设备上触发,因为它没有指定数据类型,并且
  • TAG_发现了一个意图过滤器,该过滤器仅在AndroidManifest.xml内部使用时才作为回退
因此,您所经历的是回退行为:虽然您的标记不包含NDEF记录,但它将匹配回退。一旦您向其写入文本记录,它将匹配所有注册为文本NDEF记录的应用程序,因此不再触发回退

因此,如果要在标记上使用文本记录,可以为活动添加以下意图过滤器:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="text/plain" />
</intent-filter>

请注意,使用文本记录通常不是一个好主意。首先,它们仅用于人类可读的数据,其次,许多应用程序为它们注册,这使得用户很难在“活动选择器”对话框中选择正确的应用程序

如果您的标记不包含任何数据(当前由fall back筛选器处理),则仍然无法捕获这种情况。在这种情况下,您应该为NfcV标记技术使用TECH_Discoveryd intent筛选器:

<intent-filter>
    <action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
           android:resource="@xml/filter_nfc" />

在res/xml文件夹中,您需要创建一个名为filter\u nfc.xml的文件,其中包含以下内容:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcV</tech>
    </tech-list>
</resources>

android.nfc.tech.NfcV
或者,当您想要注册多种不同的标记技术时:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcV</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
    </tech-list>
</resources>

android.nfc.tech.NfcV
android.nfc.tech.NfcA

非常感谢!你的解释很清楚。请告诉我是否还需要放置过滤器\u nfc NFCB、NFCF、NFCA?当我用我的完美应用程序检测nfc时。但是现在,如果我的应用程序不是ejecutandoce,那么它将向我发送一条错误消息“app HAS stopped”。对于您在上面的问题中显示的特定标记,在技术过滤器文件中包含NfcV就足够了。不过,我不知道你想对评论的第二部分说什么。当我使用nfc并检测到我的应用程序时,有两种选择。如果我的应用程序正在运行,它将正常工作如果我的应用程序未运行发送的消息应用程序已停止我找到详细信息道歉,onResume中有一个变量它未初始化。非常感谢你。。XPERIA有一个标记类型a,但我无法使我的应用程序检测到