gpt4 book ai didi

android - 即使包含 Ndef 数据,也不会为 ACTION_NDEF_DISCOVERED 操作发现 NFC 标签

转载 作者:搜寻专家 更新时间:2023-11-01 08:43:30 27 4
gpt4 key购买 nike

我正在尝试使用三星 S5 读取 2 个不同的 NFC 标签。两个标签都包含 NDEF 消息,第一个标签包含 MIME 类型记录作为其第一条记录,第二个标签包含替代载体记录(TNF = TNF_WELL_KNOWN,类型 = RTD_ALTERNATIVE_CARRIER)作为其第一条记录。

当我使用 ACTION_TECH_DISCOVERED Intent 通过前台调度读取标签时。对于第一个标签,技术列表列出了 NfcAMifareClassicNdef。对于第二个标签,它列出了 NfcANdef

当我尝试使用数据类型“*/*”使用 ACTION_NDEF_DISCOVERED Intent 读取标签时,发现第一个标签很好,但根本没有发现第二个标签。

最佳答案

这里的问题是 NDEF_DISCOVERED Intent 过滤器是如何工作的。使用 NDEF_DISCOVERED,您可以监视特定数据类型(即 MIME 类型)或特定 URI。在所有情况下,匹配将应用于已发现标签的 NDEF 消息中的第一个记录。

通过数据类型匹配,你可以检测

  • 包含给定 MIME 媒体类型的 MIME 类型记录或
  • 一个文本 RTD 记录 (TNF_WELL_KNOWN + RTD_TEXT),映射到 MIME 类型“text/plain”。

通过URI匹配,可以检测

  • 一个 URI RTD 记录 (TNF_WELL_KNOWN + RTD_URI),
  • 封装在智能海报 RTD 记录中的 URI RTD 记录,
  • 具有基于 URI 类型 (TNF_ABSOLUTE_URI) 的记录,或
  • NFC 论坛外部类型记录 (TNF_EXTERNAL)。

这两种匹配类型是互斥的,因此您可以在一个 Intent 过滤器中匹配数据类型或 URI。

对于第二个标签,NDEF Intent 调度系统不支持第一个记录的类型 (TNF_WELL_KNOWN + RTD_ALTERNATIVE_CARRIER)。因此,您不能将 NDEF_DISCOVERED Intent 过滤器与该标记结合使用。

例子

匹配数据类型:

  • 在 list 中:

    <intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="some/mimetype" />
    </intent-filter>
  • 在代码中:

    IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    ndef.addDataType("some/mimetype");

匹配 URL:

  • 在 list 中:

    <intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:scheme="http"
    android:host="somehost.example.com"
    android:pathPrefix="/somepath" />
    </intent-filter>
  • 在代码中:

    IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    ndef.addDataScheme("http");
    ndef.addDataAuthority("somehost.example.com", null);
    ndef.addDataPath("/somepath", PatternMatcher.PATTERN_PREFIX);

匹配 NFC 论坛外部类型:

  • 在 list 中:

    <intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:scheme="vnd.android.nfc"
    android:host="ext"
    android:pathPrefix="/com.example:sometype" />
    </intent-filter>
  • 在代码中:

    IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    ndef.addDataScheme("vnd.android.nfc");
    ndef.addDataAuthority("ext", null);
    ndef.addDataPath("/com.example:sometype", PatternMatcher.PATTERN_PREFIX);

关于android - 即使包含 Ndef 数据,也不会为 ACTION_NDEF_DISCOVERED 操作发现 NFC 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30642465/

27 4 0