Phonegap NFC 在两个设备之间发送和读取数据
Phonegap NFC Send and Read Data Between Two Devices
我正在尝试在离子 angular 应用程序中使用 phonegap-nfc 在两个支持 NFC 的设备之间发送信息(只是文本)。
到目前为止我能够连接设备并且 Ndef 事件监听器捕获标签,但是标签中的信息总是相同的,它没有给我发送的消息。
我的函数在识别到 NFC 连接时发送标签:
async connectPeerToPeer() {
var listener = NFC.addNdefListener(onSucess => {
console.log('Listening: ', onSucess);
}, onFail => {
console.log('Failure: ', onFail);
}).subscribe(event => {
NFC.share([Ndef.textRecord("hello world!")]).then(res => {
this.service.Popup("The write message was sent!", ["OK"]);
}).catch(err => {
this.service.Popup("Error: "+ err, ["OK"]);
});
});
}
我接收标签的事件:
NFC.addNdefListener((listening) => {
console.log("Listening");
}, (fail) => {
this.service.Popup(fail, ['OK']);
}).subscribe(ev => {
this.onNfc(ev);
});
onNfc(nfcEvent) {
console.log(nfcEvent);
}
有了这个,标签被传输到接收设备,但信息不是我发送的消息。
这是我在检查器上设置断点时得到的结果:
{"id":[0],"techTypes":["android.nfc.tech.Ndef"],"type":"android.ndef.unknown","maxSize":0,"isWritable":false,"ndefMessage":[{"tnf":1,"type":[85],"id":[],"payload":[3,112,108,97,121,46,103,111,111,103,108,101,46,99,111,109,47,115,116,111,114,101,47,97,112,112,115,47,100,101,116,97,105,108,115,63,105,100,61,105,111,46,105,111,110,105,99,46,115,116,97,114,116,101,114,38,102,101,97,116,117,114,101,61,98,101,97,109]},{"tnf":4,"type":[97,110,100,114,111,105,100,46,99,111,109,58,112,107,103],"id":[],"payload":[105,111,46,105,111,110,105,99,46,115,116,97,114,116,101,114]}],"canMakeReadOnly":false}
我假设我的消息可能在里面 ndefMessage:
但是当我 NFC.bytesToString(nfcEvent.tag.ndefMessage[0].payload)
我得到以下字符串
"play.google.com/store/apps/details?id=io.ionic.starter&feature=beam"
我是不是漏掉了什么?
提前致谢!
这可能是因为 Android Beam(点对点 NFC 共享中使用的功能)在 Android 10 中被弃用。(OS 正在寻找一个应用程序来替换这个缺失的功能)。
见https://source.android.com/setup/start/android-10-release#nfc
今后最好使用 Wifi Direct 或蓝牙,以便在设备之间发送数据,Google 正在推动他们的“附近”API https://developers.google.com/nearby/ 作为替代。
我正在尝试在离子 angular 应用程序中使用 phonegap-nfc 在两个支持 NFC 的设备之间发送信息(只是文本)。
到目前为止我能够连接设备并且 Ndef 事件监听器捕获标签,但是标签中的信息总是相同的,它没有给我发送的消息。
我的函数在识别到 NFC 连接时发送标签:
async connectPeerToPeer() {
var listener = NFC.addNdefListener(onSucess => {
console.log('Listening: ', onSucess);
}, onFail => {
console.log('Failure: ', onFail);
}).subscribe(event => {
NFC.share([Ndef.textRecord("hello world!")]).then(res => {
this.service.Popup("The write message was sent!", ["OK"]);
}).catch(err => {
this.service.Popup("Error: "+ err, ["OK"]);
});
});
}
我接收标签的事件:
NFC.addNdefListener((listening) => {
console.log("Listening");
}, (fail) => {
this.service.Popup(fail, ['OK']);
}).subscribe(ev => {
this.onNfc(ev);
});
onNfc(nfcEvent) {
console.log(nfcEvent);
}
有了这个,标签被传输到接收设备,但信息不是我发送的消息。
这是我在检查器上设置断点时得到的结果:
{"id":[0],"techTypes":["android.nfc.tech.Ndef"],"type":"android.ndef.unknown","maxSize":0,"isWritable":false,"ndefMessage":[{"tnf":1,"type":[85],"id":[],"payload":[3,112,108,97,121,46,103,111,111,103,108,101,46,99,111,109,47,115,116,111,114,101,47,97,112,112,115,47,100,101,116,97,105,108,115,63,105,100,61,105,111,46,105,111,110,105,99,46,115,116,97,114,116,101,114,38,102,101,97,116,117,114,101,61,98,101,97,109]},{"tnf":4,"type":[97,110,100,114,111,105,100,46,99,111,109,58,112,107,103],"id":[],"payload":[105,111,46,105,111,110,105,99,46,115,116,97,114,116,101,114]}],"canMakeReadOnly":false}
我假设我的消息可能在里面 ndefMessage:
但是当我 NFC.bytesToString(nfcEvent.tag.ndefMessage[0].payload)
我得到以下字符串
"play.google.com/store/apps/details?id=io.ionic.starter&feature=beam"
我是不是漏掉了什么?
提前致谢!
这可能是因为 Android Beam(点对点 NFC 共享中使用的功能)在 Android 10 中被弃用。(OS 正在寻找一个应用程序来替换这个缺失的功能)。
见https://source.android.com/setup/start/android-10-release#nfc
今后最好使用 Wifi Direct 或蓝牙,以便在设备之间发送数据,Google 正在推动他们的“附近”API https://developers.google.com/nearby/ 作为替代。