android - 如何在 Android 应用程序中永久禁用 NDEF 标记发现,而不仅仅是针对 Activity?
问题描述
我们有一个用于模拟 POS 终端的应用程序,即它通过 NFC 与借记卡/信用卡进行通信。在我使用的所有应用程序活动中:
nfcAdapter.enableReaderMode(this,
nfcCallback,
NfcAdapter.FLAG_READER_NFC_A |
NfcAdapter.FLAG_READER_NFC_B |
NfcAdapter.FLAG_READER_NFC_F |
NfcAdapter.FLAG_READER_NFC_V |
NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS |
NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
null
);
为了禁用 NDEF 发现,因为它会干扰卡通信。它运作良好,但仅在活动中,即当开始新活动或完成一个被调用的活动时,startActivityForResult
显然存在这种中间状态,操作系统正在发送一个 NDEF 标记发现消息,例如:
2018-11-14 09:07:11.794 802-3109/? D/NxpNciX: len = 16 > 00000D00A4040007D276000085010100
2018-11-14 09:07:11.794 802-3109/? D/NxpTml: PN54X - I2C Write successful.....
主要问题是这是不可重复的,即有时会发生,有时不会。这是个大问题。
有没有办法在应用程序级别禁用 NDEF 标签发现,而不仅仅是为了活动?
或者
有解决此问题的方法吗?
解决方案
一个很晚的回复,但在这里为未来的搜索者注意。
从 API 24 开始,nfcAdapter 实例上有一个新函数,可以在一段时间内忽略对同一标签的重复扫描。
Activity
在 nfc 回调中成功读取 nfc 后(在使用 切换之前) ,我已成功添加此内容startActivityForResult
。
// Ignore rescans of the same tag for 3 seconds in an attempt to avoid the tag being
// rescanned and having the default response while we are switching activities (while navigating)
// 3 seconds chosen as 1 second sometimes isn't enough and 3 seconds seems appropriate. Not too long or short...
nfcAdapter.ignore(tag, 3000, null, null);
推荐阅读
- node.js - 如何在 Windows 上保存日志文件?
- inno-setup - 我希望在具有最大可用空间的硬盘驱动器上选择 DefaultDirName
- heremaps - 如何在 HERE 地图高级 sdk 中显示替代路线
- mongodb - 由于 FileNotOpen,MongoDB 无法启动
- java - 在 Java 中访问 2 个对象相互引用时出错
- php - 如何自定义 Woocommerce 店面主页
- java - JMS 消息选择器和以 UUID 为值的 JMSCorrelationID
- angular8 - JSpdf@2.3.1 未在 stackblitz 上加载
- react-native - TypeError: interpolate 不是一个函数。反应原生
- javascript - 为什么 ng-repeat 不接受来自自定义指令链接函数内的 eventListner 的数据?