Фон
Я работаю над интерфейсом связи 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()