gpt4 book ai didi

android - 来自市场的 NFC 应用程序覆盖 "Complete action using"对话框条目

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:14 25 4
gpt4 key购买 nike

我已经安装了NXP TagWriterNFC TagInfo在 Nexus S 上,我的 NFC 应用程序开发使用的是同一台设备。问题是我的应用程序在读取标签后没有显示在“使用完成操作”对话框中,只有从市场上安装的两个都是。调试了一段时间后,我尝试使用 demo application结果是一样的。我在这里错过了什么?是否必须从市场安装应用程序才能正确解析 Intent 过滤器?

更新

我的 Intent 过滤器很简单

<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

我已经尝试按照 manual 中的说明添加其他内容,一个接一个以及所有一起都没有成功。它可能与 mime 类型有关吗?

当读取NFC标签时,只有这两行与 Action 相关,没有其他。

INFO/ActivityManager(111): Starting: Intent { act=android.nfc.action.TECH_DISCOVERED flg=0x10000000 cmp=com.nxp.nfc.tagwriter/.activities.DashboardActivity (has extras) } from pid 197
INFO/ActivityManager(111): Starting: Intent { cmp=com.nxp.nfc.tagwriter/.activities.ConfirmLicenseActivity } from pid 6250

看到 android.nfc.action.TECH_DISCOVERED 被触发,我添加了以下 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/nfc_tech_filter" />

并且res/xml/nfc_tech_filter.xml包含

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.NfcB</tech>
<tech>android.nfc.tech.NfcF</tech>
<tech>android.nfc.tech.NfcV</tech>
<tech>android.nfc.tech.Ndef</tech>
<tech>android.nfc.tech.NdefFormatable</tech>
<tech>android.nfc.tech.MifareClassic</tech>
<tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
</resources>

最佳答案

TAG_DISCOVERED 不会弹出您的应用程序的原因是因为它是回退选项:只有当找不到 NDEF_DISCOVERED 和 TECH_DISCOVERED Intent 的匹配项时,才会调度 TAG_DISCOVERED。

由于 NXP 应用注册了 TECH_DISCOVERED,因此它们将优先于您的应用。您包含 TECH_DISCOVERED 过滤器的解决方案是正确的,但您执行此操作的方式是错误的。 "tech-list" block 中的技术是 AND-ed 在一起的;因此在您的示例中,这意味着过滤器将仅匹配具有 NfcA AND NfcB 和 MifareClassic 的标签。由于 NfcA 和 NfcB 是截然不同的技术,无法结合在一起,因此此过滤器永远不会匹配。

您真正想要的是所有不同技术的 OR。为此,只需编写仅包含一种技术的多个 block :

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

这将匹配 NfcA 或 NfcB。当然,您应该使您的过滤器尽可能准确,以防止应用程序列表被破坏。如果您只对 NfcA 标签感兴趣,请不要申请其他标签。

关于android - 来自市场的 NFC 应用程序覆盖 "Complete action using"对话框条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5511343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com