繁体   English   中英

Cordova/Phonegap NFC 插件 NDEF_PUSH_DISABLED [已解决]

[英]Cordova/Phonegap NFC Plugin NDEF_PUSH_DISABLED [Solved]

我正在尝试使用插件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 我尝试了很多东西,最后我找到了解决方案 - 请参阅下面的答案

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

为了找到问题的根源,我查看了phonegap-nfc 插件本身的源代码,其中包含:

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

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

但在这种情况下,您必须启用并特别使用 Android Beam。 我发现的解决方案是,仅当您执行应用程序代码然后点击 Android Beam 弹出窗口时才会发送您要使用nfc.share()发送的消息。 在此操作之后,您的 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 tap 时,您只会收到回调。 您使用nfc.share()提供的最后一条消息将使用 Android Beam 发送。

Cordova Android Beam NDEF 消息接收

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM