我的活动已注册到 android.nfc.action.TECH_DISCOVERED 动作,一般来说效果很好:
<activity android:name="MyActivityToPpocessNfcTag"
android:label="@string/app_name">
<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/filter_nfc"
/>
</activity>
问题是“android.nfc.action.TECH_DISCOVERED”动作的性质。每次我扫描标签时,我都会对系统提示选择应用程序感兴趣(一些预安装的应用程序还会捕获类似类型的 nfc 标签以显示一些基本信息)。系统不提供“记住选择”功能。
我理解为什么会这样:有许多不同类型的 nfc 标签调用 TECH_DISCOVERED 操作。但是,此操作没有提供足够的信息来有效地确定如何过滤每个标签的应用程序,从而导致用户不得不做出选择。
现在我的应用程序毫无疑问可以确定它可以处理哪个标签,那么有没有办法在系统提示选择应用程序之前捕获这个意图,以便我可以采取相应的措施。我只想摆脱这个系统消息“选择应用程序”,我不想消耗所有的 nfc 标签。
请注意,“android.nfc.action.TECH_DISCOVERED”是 Android 完成的第二级 NFC 处理,第一级是“android.nfc.action.NDEF_DISCOVERED”,它具有 uri 和 mimeType 数据,因此 Android 可以有效地选择要运行的应用程序。我正在处理的 NFC 标签正在调用 TECH_DISCOVERED 操作而不是 NDEF_DISCOVERED。