我正在尝试通过扫描 NFC 标签来启动我的应用程序。我有两个标签要测试,
- 具有一种 URI 数据类型的一个(我们称之为“标签 A”)“http://panasonic.net http://panasonic.net" and
- 另一个(我们称之为“标签 B”)具有两种数据类型 - URI(包含 TNF:TNF_WELL_KNOWN 和 RTD:RTD_URI)“urn:nfc:testing.com/ecm/ecap”和 URN(TNF:TNF_EXTERNAL_TYPE) “瓮:nfc:ext:testing.com:ecm”。
注意:我的主要目标是让标签 B 发挥作用。标签 A 是我的测试标签,它不需要与此应用程序一起使用。
在我的清单中,我授予了 NFC 权限,并在清单中添加了技术发现列表的 XML。
在意图过滤器标签中,我有以下内容:
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT"/>
没有TECH_DISCOVERED
,标签 A 显示在要自动启动的应用程序列表中,但标签 B 未显示。和TECH_DISCOVERED
,两个标签都显示在列表中。
更正:无TECH_DISCOVERED
,对于标签 A 和标签 B,应用程序不会显示在自动启动列表中。但没有TECH_DISCOVERED
and <data android:scheme="http" android:host="panasonic.net"/>
,标签 A 确实使应用程序显示在自动启动列表中。对于标签 A,这是正确的行为,因为 Chrome 会在以下情况下接管并自动启动:<data ... android:host="panasonic.net"/>
不在这里。
接下来,我在意图过滤器中指定了一些数据标签:
<data android:scheme="http" android:host="panasonic.net"/>
<data android:scheme="http" android:host="fake.com"/>
当扫描标签 A 时,它会让应用程序显示在列表中。扫描标签B时,该应用程序未显示在列表中。这是正确的行为。
然后我将数据标签添加到标签 B 的意图过滤器中:
<data android:scheme="vnd.android.nfc"
android:host="ext"
android:pathPrefix="/com.informationmediary:ecm" />
这就是我开始遇到麻烦的地方。我扫描标签 A 和标签 B,但应用程序并未显示在两者的自动启动列表中。当我删除 HTTP 数据标签,只留下“vnd.android.nfc”标签并再次扫描标签 B 时,应用程序仍然不显示。
我还尝试了以下变体但无济于事:
编辑:此时我已删除以下内容,希望仅让标签 B 起作用:
<data android:scheme="http" android:host="panasonic.net"/>
<data android:scheme="http" android:host="fake.com"/>
1.
<data android:scheme="vnd.android.nfc"
android:host="ext"
android:pathPrefix="/com.informationmediary:ecm" />
2.
<data android:scheme="vnd.android.nfc"
android:host="ext"
android:pathPrefix="/informationmediary.com:ecm" />
3.
<data android:scheme="urn:nfc"
android:host="ext"
android:pathPrefix="/com.informationmediary:ecm" />
4.
<data android:scheme="urn:nfc"
android:host="ext"
android:pathPrefix="/informationmediary.com:ecm" />
5.
<data android:scheme="vnd.android.nfc"
android:host="informationmediary.com"
android:pathPrefix="/ecm/ecap"/>
6.
<data android:scheme="urn:nfc"
android:host="informationmediary.com"
android:pathPrefix="/ecm/ecap"/>
我已经尝试了前四个中的两个与后两个的所有组合:
1&5、1&6、2&5、2&6、3&5、3&6、4&5 和 4&6
我怀疑scheme=“urn:nfc”,但还是尝试了一下,这次“抓住了救命稻草”。
标签 B 是我需要工作的标签,标签 A 是我拥有的测试标签。
我已阅读文档https://developer.android.com/guide/topics/connectivity/nfc/nfc#ext-type https://developer.android.com/guide/topics/connectivity/nfc/nfc#ext-type
And https://developer.android.com/guide/topics/manifest/data-element#mime https://developer.android.com/guide/topics/manifest/data-element#mime以及论坛上的其他几篇帖子基本上与developer.androidsights 中的内容相同。