Cordova / Phonegap NF C Плагин NDEF_PUSH_DISABLED [решено] - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать базовое c Cordova NF C приложение, использующее плагин phonegap-nf c, который отправляет одно сообщение с помощью NDEF Peer-to-Peer Messaging с одного устройства на еще один. Поэтому у меня два Android (8+) устройства. Моя проблема похожа на эту здесь: https://forum.ionicframework.com/t/ndef-push-disabled-ionic-3/142617, но данные решения не соответствуют этой проблеме.

Всякий раз, когда я пытаюсь отправить сообщение NDEF, используя nfc.share([ndef.textRecord("Hello")), я получаю ошибка NDEF_PUSH_DISABLED . Я много чего перепробовал и наконец нашел решение - см. Ответ ниже

1 Ответ

0 голосов
/ 15 апреля 2020

Вокруг этой проблемы не так много сообщений, поэтому я хочу дать подробное описание, как решить проблему.

Чтобы найти причину проблемы, я посмотрел исходный код самого плагина phonegap-nf c , который содержит:

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

Таким образом, проблема не в самом коде, а в адаптере NF C от устройства Android, которое возвращает сообщение NDEF, pu sh отключено. Поэтому я наблюдал за своими настройками NF C на устройстве и включил Android Beam, который особенно использует одноранговый обмен NDEF. Обычно вы отключаете эту функцию, так как она всегда всплывает и пытается поделиться информацией о вашем текущем приложении по умолчанию при подключении двух устройств с поддержкой NF C, что действительно раздражает ...

Но в этом контексте вы должны включить и особенно использовать Android Луч. Решение, которое я нашел, состоит в том, что сообщение, которое вы хотите отправить с помощью 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 Луч.

Cordova Android Beam NDEF message receive

I надеюсь, что это описание ошибки поможет некоторым людям получить одноранговые сообщения NF C - с использованием Cordova, Phonegap или Ioni c.

...