我目前正在开发一个简单的应用程序,它会扫描 NFC 标签并从中读取数据。为了实现它,我在这里遵循了这个例子。
为了测试,我使用的是真正的安卓设备(三星 Galaxy J6)和 Mifare NFC 卡。
在应用程序启动时,一切正常,NfcManager 已成功启动,标签事件已注册(使用 NfcManager.registerTagEvent),但在调用requestTechnology并扫描 NFC 卡时出现问题。
我注意到的区别在于 Android 中的意图:在运行requestTechnology并针对手机扫描卡之前,意图和附加到它的操作看起来像这样=> 操作在主线程上。
之后,意图和动作看起来像这样。
对我来说,动作从主线程发生变化似乎很奇怪。
Android 代码与上面链接中给出的完全相同,React Native 中的代码如下所示:
_read = async () => {
try {
const enabled = await NfcManager.isEnabled();
console.warn('Enabled: ', enabled);
await NfcManager.registerTagEvent((tag) => {
console.warn('Tag Discovered', tag);
}, 'Hold your device over the tag', true);
let tech = Platform.OS === 'ios' ? NfcTech.MifareIOS : [NfcTech.MifareClassic, NfcTech.NfcA];
let resp = await NfcManager.requestTechnology(tech);
let tag = await NfcManager.getTag()
.then(() => { console.warn('Tag: ', tag)})
.catch((err) => console.warn('Tag error: ', err));
{...}
// this._cleanUp();
} catch (ex) {
console.warn(ex);
this._cleanUp();
}
}
除此之外,requestTechnology方法只有在应用程序被带到后台然后立即再次回到前台时才会被解析。这也显得很奇怪……
有谁知道如何解决这些问题并启动和运行 NFC 卡读取过程?
我感谢您的帮助!