Как отправить SNEP GET запрос с Android
У меня есть считыватель NFC ACS ACR122U и я хочу отправить на него данные с моего телефона Android.
Я нашел много примеров того, как подключить два моих устройства в режиме P2P и как отправить данные с моего телефона на ACR122U, но мой настольный сервер (ACR122U) всегда получает запрос SNEP PUT. Я бы отправил запрос GET, но я могу найти только примеры, которые используют Android, встроенный в систему NDEF, без указания запроса PUT или GET.
Как я могу упаковать и отправить запрос SNEP GET с моего устройства Android на ACR122U?
1 ответ
Краткий ответ: вы не можете.
Android API не позволяет вам реализовывать пользовательские сервисы LLCP. Единственными сервисами LLCP, реализованными на устройствах Android, является NEP-сервер NFC Forum Default (имя сервиса urn:nfc:sn:snep
, адрес точки доступа к услуге 4) и, по унаследованным причинам, push-протокол NDEF для Android (аналогично SNEP, но датируется временем до публикации спецификации SNEP).
В то время как спецификация протокола SNEP определяет запрос GET для получения сообщения NDEF с другого устройства, сервер SNEP по умолчанию для форума NFC определен так, чтобы принимать только запросы PUT. Запросы GET должны быть отклонены этим сервером SNEP.
Из технической спецификации NFC Forum Simple NDEF Exchange Protocol (версия 1.0):
Сервер SNEP по умолчанию обеспечивает логическую входящую почту. Клиент, подключенный к серверу по умолчанию, может помещать сообщения NDEF в папку "Входящие", используя сообщения запроса Put. [...]
Сервер по умолчанию НЕ ДОЛЖЕН принимать запросы Get. Соответствующий ответ для сообщения запроса Get не реализован.
Таким образом, вы можете отправлять сообщения NDEF только на сервер SNEP Forum NFC по умолчанию, а не наоборот.
Следовательно, если вы хотите отправить сообщение NDEF на устройство Android через одноранговый режим, вам необходимо реализовать клиент SNEP на стороне ACR122U. Затем можно разрешить этому клиенту подключаться к серверу SNEP на устройстве Android (по имени службы urn:nfc:sn:snep
) и отправьте ему сообщение NDEF, используя запрос PUT.
Если вы хотите получать сообщение NDEF от устройства Android через одноранговый режим, вам необходимо внедрить сервер SNEP на стороне ACR122U. Затем клиент Android SNEP подключится к вашему серверу SNEP и отправит ожидающее сообщение NDEF (например, зарегистрированное через NfcAdapter.setNdefPushMessage()
) к нему, снова используя запрос PUT.