【问题标题】:Activity is not launched by NFC TagNFC 标签未启动 Activity
【发布时间】:2014-10-15 17:55:43
【问题描述】:

我已经在 Activity 的清单文件中声明了必需的意图过滤器。

场景 #1: 当我使用 NFCDemo android 示例应用程序进行测试时 -> 广播 nfc 标签 -> 那时我的应用程序在选择器对话框中被提示,就像其他 nfc 应用程序 NFC 标签信息和恩智浦标签信息一样。

场景 #2: 刷完真正的 NFC Tag(card) -> NFC TagInfo 后,选择器对话框中会提示 TagInfo 应用程序,但我的应用程序没有。

我的要求 -> 我的应用也应该像 NFC 标签信息应用一样显示。 更多信息 -> 它是一张空卡!。

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
    <action android:name="android.nfc.action.TAG_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<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:resource="@xml/supporting_nfc_techlist" />

【问题讨论】:

  • 你的空卡是不是NDEF格式的?
  • PS:向我们展示您的supporting_nfc_techlist文件
  • @VGe0rge,问题仅在 support_nfc_techlist 中,Michale Roland 的回答帮助我解决了问题。谢谢VGe0rge

标签: android nfc intentfilter ndef launching-application


【解决方案1】:

只有当您的 NFC 标签包含与过滤器匹配的 NDEF 消息时,才会触发 NDEF_DISCOVERED 意图过滤器。您通常应该为特定记录类型指定过滤器(例如,特定 MIME 类型、特定 NFC 论坛外部类型名称或特定 URI(-prefix))。对“*/*”使用 MIME 类型过滤器在某些设备上不起作用。

TAG_DISCOVERED Intent 过滤器通常不应在应用清单中使用。在当前的 Android 版本中,它主要与前台调度系统一起使用,并且在没有为任何标签发现事件注册其他活动时作为后备。

TECH_DISCOVERED 意图过滤器将过滤那些在supporting_nfc_techlist.xml 文件中定义的标签技术。例如,如果你想检测任何标签,你可以使用这样的过滤器:

<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
  <tech-list>
    <tech>android.nfc.tech.NfcA</tech>
  </tech-list>
  <tech-list>
    <tech>android.nfc.tech.NfcB</tech>
  </tech-list>
  <tech-list>
    <tech>android.nfc.tech.NfcF</tech>
  </tech-list>
  <tech-list>
    <tech>android.nfc.tech.NfcV</tech>
  </tech-list>
  <tech-list>
    <tech>android.nfc.tech.IsoDep</tech>
  </tech-list>
  <tech-list>
    <tech>android.nfc.tech.MifareClassic</tech>
  </tech-list>
  <tech-list>
    <tech>android.nfc.tech.MifareUltralight</tech>
  </tech-list>
  <tech-list>
    <tech>android.nfc.tech.NdefFormatable</tech>
  </tech-list>
  <tech-list>
    <tech>android.nfc.tech.Ndef</tech>
  </tech-list>
  <tech-list>
    <tech>android.nfc.tech.NfcBarcode</tech>
  </tech-list>
</resources>

请注意,Android 文档中的示例具有误导性。技术列表与逻辑 OR 组合,而一个技术列表中的技术条目与逻辑 AND 组合。因此,

<tech-list>
  <tech>android.nfc.tech.NfcA</tech>
</tech-list>
<tech-list>
  <tech>android.nfc.tech.NfcB</tech>
</tech-list>

表示NfcA 或 NfcB,而

<tech-list>
  <tech>android.nfc.tech.NfcA</tech>
  <tech>android.nfc.tech.NfcB</tech>
</tech-list>

表示NfcA AND NfcB(这是不可能的组合,因为NfcX(X = {A, B, F, V})技术类型是互斥的。

【讨论】:

  • @Michale Roland,我做了一个更改,将我的supporting_nfc_techlist.xml 的内容替换为您提供的内容,并且我的应用程序显示在对话框列表中。然后我比较了这两个文件,不同之处在于,您在单独的 tehc-list 标签中提到了每种技术类型,而我将所有内容分组在一个技术列表标签中。非常感谢您的回答,它帮助了我
  • @Michale Roland,感谢 Michale 的出色解释。我正在考虑如何有效地使用技术列表,现在你的答案已经澄清了。
猜你喜欢
  • 1970-01-01
  • 2016-06-05
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多