Фон
Я работаю над интерфейсом связи NFC между встроенной системой и приложением Android. Встроенная система может реагировать на команды, записанные в сообщение NDEF тега NFC. Во время обработки команды поле RF неактивно. Обычно по окончании обработки команды срабатывает событие android.nfc.action.NDEF_DISCOVERED
и я могу обработать ответ в своем приложении.
К сожалению, это не всегда так, и иногда устройство Android не генерирует такое событие. Если я физически удаляю Android-устройство из метки NFC и снова помещаю его в метку, срабатывает событие NDEF_DISCOVERED
. Я хочу реализовать механизм опроса, который запускает событие NDEF_DISCOVERED
.
Что я пробовал
Я начал с отключения и повторного включения ReaderMode адаптера NFC, но безуспешно:
public void reconnectNfc() {
NfcAdapter nfcAdapter = getNfcAdapter();
nfcAdapter.disableReaderMode(this);
getNfcAdapter().enableReaderMode(...);
}
событие отправки не запускается при отключении режима чтения.
Принятый ответ на этот вопрос: android получает тег NFC без использование системы отправки предполагает, что я мог бы получить обновленный объект Tag
для отправки таким образом, но, к сожалению, это не работает для меня.
Есть ли способ отключить и снова включить возможности системы NFC?
Система взаимодействия
В моем AndroidManifest.xml я указал действие, которое запускается, когда система Android получает намерение отправки NFC:
<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()