NFC标签未启动活动

时间:2014-10-15 17:55:44

标签: android nfc intentfilter ndef launching-application

我在Activity的清单文件中声明了必需的intent过滤器。

场景#1: 当我用NFCDemo android示例应用程序测试时 - > broad cast nfc tag - >那个时候我的应用程序在选择器对话框中提示,就像其他nfc应用程序NFC标签信息&恩智浦标签信息

场景#2: 刷完真正的NFC标签(卡)后 - > 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" />

1 个答案:

答案 0 :(得分:5)

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

通常不应在应用清单中使用TAG_DISCOVERED意图过滤器。在当前的Android版本中,它主要用于前台调度系统,如果没有为任何标记发现事件注册其他活动,则作为后退。

TECH_DISCOVERED intent过滤器将过滤support_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 NfcBNfcX(X = {A,B,F,V})技术无法实现的组合类型是互斥的。