【问题标题】:Phonegap NFC Send and Read Data Between Two DevicesPhonegap NFC 在两个设备之间发送和读取数据
【发布时间】:2021-02-12 08:52:41
【问题描述】:

我正在尝试使用 ionic 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"

我错过了什么吗?

提前致谢!

【问题讨论】:

  • 您为每台设备尝试的操作系统版本是什么?
  • 安德鲁,我用的是 Galaxy S9 Plus 和华为 P30
  • 操作系统:Android 版本 10

标签: angular nfc ndef


【解决方案1】:

这可能是因为 Android Beam(点对点 NFC 共享中使用的功能)在 Android 10 中已被弃用。(操作系统正在寻找一个应用来替换这个缺失的功能)。

https://source.android.com/setup/start/android-10-release#nfc

展望未来,使用 Wifi Direct 或蓝牙可能会更好,以便在设备之间发送数据,Google 正在推动他们的“附近”API https://developers.google.com/nearby/ 作为替代。

【讨论】:

  • 所以没有 Android Beam 的单独 NFC 不允许此类传输,或者我只能在 Beam 关​​闭时使用 NFC?
  • 所以技术上是的,您可以使用 NFC 在 2 个没有 Android Beam 的 Android 设备之间传输数据,普通 NFC 有一个启动器(有源设备)和目标(主要是 NFC 标签等无源设备)。幸运的是,Android 允许主机卡仿真 (HCE) 模式,它伪装成“目标”设备。因此,您编写了一个 HCE 服务,它伪装成带有数据的 4 类卡,然后其他设备读取它,就好像它是普通的 4 类标签一样。这在技术上很难实现,需要考虑很多事情,并且只能与在前台运行的两个应用程序一起使用。
  • 谢谢 Andrew,我实际上已经在阅读 HCE,这可能不是一条简单的道路,但我期待着实施它。感谢您的支持
  • 对于模拟卡的读取,我建议使用enableReaderMode API developer.android.com/reference/android/nfc/… 读取,因为即使旧设备具有Android Beam,它也会被此API 禁用(它也只是一个更好和更新的 API 来读取标签)。
  • 谢谢 Andrew,是的,我正在使用 readerMode 检查 HCE,我设法在设备中模拟卡并使用另一个设备对其进行扫描,现在我正在尝试使用收发器将原始命令发送到HCE 设备,试图根据 HCE 将接受哪些命令来触发 HCE.registerCommandCallback 来了解该部分,以便我可以将一些数据发送回扫描设备。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多