В чем разница между enableReaderMode и enableForegroundDispatch?

Я нашел два подхода, чтобы приложение Android обнаруживало и обрабатывало теги NFC:

  1. NfcAdapter.enableReaderMode(activity, callback, flags, extras), а затем получите информацию о теге в обратном вызове.

  2. NfcAdapter.enableForegroundDispatch(activity, intent, filters, techLists) а затем получите информацию о теге в onNewIntent(intent) способ деятельности.

в настоящее время я использую второй подход, однако недавно я обнаружил enableReaderMode подход и интересно, если это лучше использовать для обработки NFC метки.

так что разница между enableReaderMode и enableForegroundDispatch?

2 ответов


система отправки переднего плана

система наземной отправки (NfcAdapter.enableForegroundDispatch()) существует с Android 2.3.3 (который в основном является началом Android NFC). Следовательно, этот метод поддерживается на всех устройствах Android с возможностями NFC.

система отправки переднего плана используется для предоставления действия, которое в настоящее время находится в приоритете переднего плана при обработке событий обнаружения NFC (т. е. обнаруженных тегов NFC и сообщений NDEF, полученных от одноранговых устройств). Это средство это даже если зарегистрировано другое приложение (с помощью фильтра намерений в AndroidManifest.xml) для определенного типа тега или данных NDEF событие NFC все равно будет передано на передний план вместо этого другого действия. Следовательно, метод не изменяет способ Android прослушивает устройства NFC (теги NFC, устройства P2P), он только изменяет приоритет для обработки обнаруженных устройств.

API режима чтения

API режима чтения (NfcAdapter.enableReaderMode()) был введен в Android 4.4. Следовательно, не все устройства Android с возможностями NFC поддерживают этот метод.

в отличие от системы отправки переднего плана, API режима чтения изменяет способ Android прослушивания устройств NFC. API режима чтения отключает одноранговый режим. Это, например, позволяет обнаружить режим эмуляции карты других устройств, которые имеют режим одноранговой и режим эмуляции карты включен одновременно (как в случае с Android HCE). (Обычно такое устройство будет обнаружен как одноранговое устройство, и приложение Android не сможет получить доступ к функциям эмуляции карт.)

кроме того, вы можете изменить конкретные параметры режима чтения NFC, например, вы можете

  • определите технологии тегов, которые опрашивает считыватель NFC,
  • определите интервал, в котором Android проверяет, присутствует ли тег, отправив определенную последовательность команд в тег и проверив, есть ли ответ принято,
  • остановите Android от автоматической отправки команд в тег, чтобы проверить, содержит ли тег сообщение NDEF,
  • остановить Android от воспроизведения звука при обнаружении тегов.

enableReaderMode: ограничьте контроллер NFC режимом считывания, пока это действие находится на переднем плане.

enableForegroundDispatch: это даст приоритет активности переднего плана при отправке обнаруженного тега в приложение.

так что в основном вы можете использовать оба для той же цели, что и чтение/запись тега. enableReaderMode используется телефонами Android в сочетании с контроллером Broadcom NFC, потому что есть ошибка при проверке precense. Насколько мне известно, только enableReaderMode можно увернуться от этого, увеличив EXTRA_READER_PRESENCE_CHECK_DELAY.