我想编写一个 Android 应用程序,当检测到 NFC 标签时,该应用程序会自动打开或至少被列为处理程序。
我创建了一个示例应用程序,如https://www.youtube.com/watch?v=KyVihl6ACmQ中所述 但它不起作用(应用程序未打开)。
您可以在https://github.com/hobber89/androidNFCHandler
找到我的代码如视频所示,我添加了 NFC 权限、NFC 功能和意图过滤器。 我做错了什么,缺少什么?
亲切的问候, 沃尔夫冈
我明白为什么你的第一次尝试没有成功。
您的代码仅在清单中注册,当带有
Ndef
消息的标签时启动,您正在使用的标签是空白的,上面没有 Ndef
消息。
NXP Taginfo 的输出显示:-
-- NDEF ------------------------------
# No NDEF Data Storage Populated:
和
* TAG: Tech [android.nfc.tech.NfcV, android.nfc.tech.NdefFormatable]
因此,一旦格式化,标签就能够存储
Ndef
消息(格式化后,Tag Tech android.nfc.tech.NdefFormatable
会更改为 android.nfc.tech.Ndef
)
最近更新后
现在您的技术列表正在寻找所有类型的标签,因此将与您用于测试的标签类型相匹配。
从表面上看,这应该可行,但我担心将其添加到清单 xml 的方式将无法正确解析。
我建议在 AndroidManifest.xml 文件中使用以下
Activity
条目
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
这是更正常的样式,也是我在一个应用程序中使用的样式,用于在出现标签时启动我的应用程序。可能唯一的第一个
intent-filter
xml 标签是 process,将技术过滤器添加到 NDEF_DISCOVERED
和 TAG_DISCOVERED
没有效果。