【问题标题】:Cordova/Phonegap NFC Plugin NDEF_PUSH_DISABLEDCordova/Phonegap NFC 插件 NDEF_PUSH_DISABLED
【发布时间】:2020-04-15 08:16:54
【问题描述】:

我正在尝试使用插件 phonegap-nfc 构建一个基本的 Cordova NFC 应用程序,该插件使用 NDEF Peer-to-Peer Messaging 从一台设备向另一台设备发送一条消息。因此我有两个 Android (8+) 设备。我的问题与这里的问题类似:https://forum.ionicframework.com/t/ndef-push-disabled-ionic-3/142617 但给定的解决方案不适合该问题。

每当我尝试使用 nfc.share([ndef.textRecord("Hello")) 发送 NDEF 消息时,我都会收到错误 NDEF_PUSH_DISABLED。我尝试了很多东西,终于找到了解决方案 - 请参阅下面的答案

【问题讨论】:

    标签: cordova ionic-framework cordova-plugins phonegap nfc-p2p


    【解决方案1】:

    关于这个问题的帖子不多,所以我想在这里提供一个详细的描述如何解决这个问题。

    为了找到问题的根源,我查看了phonegap-nfc plugin itself的源代码,其中包含:

    NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
    if (!nfcAdapter.isNdefPushEnabled()) {
       callbackContext.error(STATUS_NDEF_PUSH_DISABLED);
    }
    

    所以问题不在于代码本身,而是来自 Android 设备的 NFC 适配器返回 NDEF 消息推送被禁用。所以我在设备上查看了我的 NFC 设置并启用了 Android Beam,它特别使用了 NDEF 点对点共享。通常您禁用此功能,因为它总是弹出并尝试在默认情况下共享您当前的应用程序信息,连接两个启用 NFC 的设备,这真的很烦人......

    但在这种情况下,您必须启用并特别使用 Android Beam。我找到的解决方案是,您要使用nfc.share() 发送的消息只有在您执行应用程序代码并随后点击 Android Beam 弹出窗口时才会发送。执行此操作后,您的 NDEF 消息将使用 Android Beam 和您给定的消息发送到其他设备。为了发送和接收消息,我使用了以下代码:

    nfc.addNdefListener(
        function (nfcEvent) {
            var tag = nfcEvent.tag,
                ndefMessage = tag.ndefMessage;
    
            // dump the raw json of the message, note: real code will need to decode the payload from each record
            alert("NDS1 " + JSON.stringify(ndefMessage));
    
            // assuming the first record in the message has a payload that can be converted to a string.
            alert("NDS2 " + nfc.bytesToString(ndefMessage[0].payload).substring(3));
    
            nfc.share([ndef.textRecord("Hello")], () => {alert("Success")}, (err) => alert(JSON.stringify(err)));
        },
        function () { // success callback when listener was enabled
            alert("Waiting for NDEF tag");
        },
        function (error) { // error callback
            alert("Error adding NDEF listener " + JSON.stringify(error));
        }
    )
    

    您不必等到 NdefListener 可用,您可以在任何地方使用nfc.share(),当您点击 Android Beam 时,您只会收到回调。您使用 nfc.share() 提供的最后一条消息将使用 Android Beam 发送。

    我希望这个错误描述可以帮助一些人使用 Cordova、Phonegap 或 Ionic 获得 NFC - NDEF 点对点消息传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 2013-10-29
      • 1970-01-01
      相关资源
      最近更新 更多