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

问题描述 投票:0回答:1

我正在尝试使用插件phonegap-nfc构建一个基本的Cordova NFC应用程序,该插件使用NDEF对等消息传递功能将消息从一台设备发送到另一台设备。因此,我有两个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个回答
0
投票

关于此问题的帖子不多,所以我想在此处提供详细说明以解决该问题。

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

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

所以问题不在于代码本身,而是返回NDEF消息推送的Android设备中的NFC适配器被禁用。因此,我在设备上观看了我的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轻按时收到回调。您使用nfc.share()提供的最后一条消息将使用Android Beam发送。

Cordova Android Beam NDEF message receive

我希望此错误描述可以帮助某些人使用启用了Cordova,Phonegap或Ionic的NFC-NDEF对等消息传递。

© www.soinside.com 2019 - 2024. All rights reserved.