Enforce NF C событие отправки // отключение и повторное включение возможностей системы NF C - PullRequest
0 голосов
/ 29 апреля 2020

Фон

Я работаю над интерфейсом связи NF C между встроенной системой и приложением Android. Встроенная система может реагировать на команды, записанные в сообщение NDEF тега NF C. Во время обработки команды поле RF неактивно. Обычно после завершения обработки команды вызывается событие android.nfc.action.NDEF_DISCOVERED, и я могу обработать ответ в моем приложении.

К сожалению, это не всегда так, и иногда такое событие не генерируется устройство Android. Если я физически удаляю устройство Android из тега NF C и снова помещаю его в тег, происходит событие NDEF_DISCOVERED. Я хочу реализовать механизм опроса, который запускает событие NDEF_DISCOVERED.

То, что я пробовал

Я начал с отключения и повторного включения ReaderMode NF C адаптер, но безуспешно:

    public void reconnectNfc() {
      NfcAdapter nfcAdapter = getNfcAdapter();
      nfcAdapter.disableReaderMode(this);
      getNfcAdapter().enableReaderMode(...);     
    }

событие отправки не вызывается отключением режима считывателя.

Принятый ответ на этот вопрос: android получить тег NF C без использования системы диспетчеризации предполагает, что я мог бы получить обновленный объект Tag для отправки таким способом, но, к сожалению, это не работает для меня.

Есть ли способ выключить и снова включить возможности системы NF C?

Система взаимодействия

В моем AndroidManifest. xml Я указал действие, которое запускается, когда система Android получает намерение отправки NF C:

    <activity
        android:name="myNfcDispatchActivity"
        ...>

        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>

Диспетчеризация в myNfcDispatchActivity выполняется следующим образом:

@Override
protected void onResume() {
    super.onResume();

    getNfcAdapter().enableReaderMode(this, 
        tag -> {
          Handler mainHandler = new Handler(Looper.getMainLooper());
          mainHandler.post(() -> dispatchTag(tag));
        },
        NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS | NfcAdapter.FLAG_READER_NFC_A,
        null);
}

и я обрабатываю сообщение NDEF объекта tag в методе dispatchTag()

1 Ответ

0 голосов
/ 05 мая 2020

Принятый ответ на этот вопрос: Как я могу повторно подключиться к тегу IsoDep? предполагает, что нет способа решить мою проблему программно

Все, что вы можете сделать в этом дело в том, чтобы физически удалить метку и снова представить ее читателю.

...