使用 React Native 读取 NFC 标签类型 "android.nfc.tech.NfcV" 和 "android.nfc.tech.NdefFormatable"
Reading NFC Tag types "android.nfc.tech.NfcV" and "android.nfc.tech.NdefFormatable" with React Native
我正在尝试使用 NFC 从血糖仪读取数据,现在是 Android,还没有尝试 iOS(没有带 NFC 的 phone ).
我正在使用 react-native-nfc-manager 作为库及其附带的示例:
https://github.com/whitedogg13/react-native-nfc-manager
我收到这个标签:
{ "techTypes":["android.nfc.tech.NfcV","android.nfc.tech.NdefFormatable"], "id":"87C5280D002602E0"}
我可以看到 NfcV 包含在该库中,但我该如何读取它的类型?
我正在按照示例进行操作,因此我没有在我的清单或我的 build.gradle 中设置任何内容。我已经链接它并且它正在工作,但我似乎错过了最后一部分。
按照这个例子,看起来我应该使用这样的方法:
_parseText = (tag) => {
try {
if (Ndef.isType(tag.ndefMessage[0], Ndef.TNF_WELL_KNOWN, Ndef.RTD_TEXT)) {
return Ndef.text.decodePayload(tag.ndefMessage[0].payload);
}
} catch (e) {
console.log(e);
}
return null;
}
但是我的标签没有 ndefMessage[0]
。
由于您的标签在其 techTypes
列表中不包含 Ndef
,因此它不包含 NDEF 消息。因此,您将无法阅读任何此类消息。由于您的 "tag" 是血糖仪,我认为它甚至不会包含 NDEF 消息。
相反,您将不得不找出血糖仪实际支持的命令(可能会支持ISO/IEC 15693 READ SINGLE BLOCK 命令(请参阅). In order to send such low-level commands, you will need to use the Generic NfcTech API 标签技术:
NfcManager.requestTechnology(NfcTech.NfcV)
然后就可以使用收发的方式来交换任意命令了:
NfcManager.transceive(...)
我正在尝试使用 NFC 从血糖仪读取数据,现在是 Android,还没有尝试 iOS(没有带 NFC 的 phone ).
我正在使用 react-native-nfc-manager 作为库及其附带的示例: https://github.com/whitedogg13/react-native-nfc-manager
我收到这个标签:
{ "techTypes":["android.nfc.tech.NfcV","android.nfc.tech.NdefFormatable"], "id":"87C5280D002602E0"}
我可以看到 NfcV 包含在该库中,但我该如何读取它的类型?
我正在按照示例进行操作,因此我没有在我的清单或我的 build.gradle 中设置任何内容。我已经链接它并且它正在工作,但我似乎错过了最后一部分。
按照这个例子,看起来我应该使用这样的方法:
_parseText = (tag) => {
try {
if (Ndef.isType(tag.ndefMessage[0], Ndef.TNF_WELL_KNOWN, Ndef.RTD_TEXT)) {
return Ndef.text.decodePayload(tag.ndefMessage[0].payload);
}
} catch (e) {
console.log(e);
}
return null;
}
但是我的标签没有 ndefMessage[0]
。
由于您的标签在其 techTypes
列表中不包含 Ndef
,因此它不包含 NDEF 消息。因此,您将无法阅读任何此类消息。由于您的 "tag" 是血糖仪,我认为它甚至不会包含 NDEF 消息。
相反,您将不得不找出血糖仪实际支持的命令(可能会支持ISO/IEC 15693 READ SINGLE BLOCK 命令(请参阅
NfcManager.requestTechnology(NfcTech.NfcV)
然后就可以使用收发的方式来交换任意命令了:
NfcManager.transceive(...)