Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular Phonegap NFC在两台设备之间发送和读取数据_Angular_Nfc_Ndef - Fatal编程技术网

Angular Phonegap NFC在两台设备之间发送和读取数据

Angular Phonegap NFC在两台设备之间发送和读取数据,angular,nfc,ndef,Angular,Nfc,Ndef,我正在尝试使用应用程序中的phonegap NFC在两个支持NFC的设备之间发送信息(仅文本) 到目前为止,我能够连接设备,Ndef事件侦听器捕获标记,但标记中的信息始终相同,它不会给我发送的消息 识别NFC连接时发送标签的功能: async connectPeerToPeer() { var listener = NFC.addNdefListener(onSucess => { console.log('Listening: ', onSucess); }

我正在尝试使用应用程序中的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中被弃用了。(操作系统正在寻找一个应用程序来替换此缺失的功能)


展望未来,可能最好使用Wifi Direct或蓝牙在设备之间发送数据,谷歌正在推出其“附近”API作为替代品。

您正在为每台设备尝试哪种操作系统版本?Andrew,我使用的是galaxy S9 Plus和华为P30OS:Android版本10So不带Android Beam的NFC不允许这样的传输,或者我只能在Beam关闭时使用NFC?所以从技术上讲,可以在没有Android Beam的两台Android设备之间使用NFC传输数据,普通NFC有一个启动器(活动设备)和目标(大部分是被动设备,如NFC标签)。幸运的是,Android允许主机卡模拟(HCE)模式,在这种模式下,它假装是一个“目标”因此,您编写了一个HCE服务,它假装是一个4类型的卡,上面有数据,然后其他设备读取它,好像它是一个普通的4型标签。这在技术上是很有挑战性的,需要考虑很多事情,并且只与在前景中运行的两个应用程序一起工作。谢谢安得烈,我实际上已经在阅读了。在HCE上,这可能不是一条简单的途径,但我期待着实现它。感谢您支持读取模拟卡,我建议使用
enableReaderMode
API来读取,因为即使旧设备有Android Beam,它也会被此API禁用(无论如何,它只是一个更好、更新的API,用于读取标记)。谢谢Andrew,是的,我正在使用readerMode检查HCE,我设法在设备中模拟卡并使用另一台设备扫描它,现在我正在尝试使用transceive向HCE设备发送原始命令,试图了解HCE将接受哪些命令来触发HCE.registerCommandCallback,以便我可以发送一些数据返回到扫描设备。