Как заставить два устройства на Android Communicate через NFC?

Вопрос или проблема

Как заставить два устройства на Android Communicate через NFC?

Я разрабатываю автономное приложение для носимых устройств на Android (Wear OS 4), в котором два устройства должны обменяться своими уникальными идентификаторами один раз (только для спаривания). Планировалось использовать NFC p2p для обмена данными, но недавно я обнаружил, что NFC p2p (Android Beam) устарел в API > 29. Следующим лучшим вариантом было использование API Nearby devices, но это потребовало бы создания дополнительных экранов (отправка, получение, список устройств и согласие) в приложении, дополнительных разрешений и большего расхода батареи, учитывая, что спаривание – это одноразовая функция. Есть ли какие-либо сторонние библиотеки, которые я могу использовать для непосредственного использования NFC p2p? Или с какими альтернативными подходами я должен продолжать? Я также планирую поддерживать устройства Tizen в будущем, так что использование Android Nearby ограничивает меня в этом.

Ответ или решение

Для настройки обмена данными между двумя носимыми устройствами на Android (Wear OS 4) с использованием NFC, вы правы в том, что API Android Beam для NFC P2P больше не рекомендуется, и использование Nearby Devices API может быть излишним для вашей задачи. Однако, для ваших нужд, есть несколько подходов, которые вы можете рассмотреть:

Подход 1: Использование NFC через стандартные API

  1. Использование NFC Adapter:
    Вы можете использовать стандартный класс NfcAdapter для реализации обмена данными по NFC. Вам нужно будет создать активность, которая будет обрабатывать интенты, когда устройства будут соединяться. Основной алгоритм будет включать:

    • Настройка NFC:
      Убедитесь, что на устройствах включен NFC, и получите экземпляр NfcAdapter.

    • Создание PendingIntent:
      Вам необходимо создать PendingIntent, чтобы ваше устройство могло обрабатывать RFID-сообщения при их получении.

    • Создание меток:
      Используйте NdefMessage для создания сообщения с уникальным ID, который нужно обменять.

    • Обработка новых соединений:
      Реализуйте метод onNewIntent в вашей активности для обработки входящих данных.

    Пример кода может выглядеть следующим образом:

    private void sendNfcMessage(String uniqueId) {
       NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
       NdefMessage message = new NdefMessage(
               new NdefRecord[]{NdefRecord.createTextRecord("en", uniqueId)});
    
       // Код для отправки сообщения...
    }
    
    @Override
    protected void onNewIntent(Intent intent) {
       super.onNewIntent(intent);
       if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
           Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
           if (rawMsgs != null && rawMsgs.length > 0) {
               NdefMessage msg = (NdefMessage) rawMsgs[0]; // Получаем сообщения
               // Обработка полученного сообщения
           }
       }
    }

Подход 2: Исследование сторонних библиотек

На данный момент нет многоизвестных сторонних библиотек, которые упростили бы работу с NFC P2P на Android. Однако, вы можете попробовать следующее:

  1. NFC Library: Попробуйте найти библиотеки, такие как NfcUtils, которые могут облегчить создание и обработку NFC-сообщений. Имейте в виду, что эта информация может быть устаревшей, и лучше проверить актуальные репозитории на GitHub.

Подход 3: Альтернативные технологии

Если ваши цели также включают поддержку Tizen устройств, рассмотрите возможность использования Bluetooth Low Energy (BLE) для одной операции обмена ID. BLE более кросс-платформен и не требует прямого взаимодействия, как в случае с NFC. Вы можете сделать одноразовое подключение, где устройства будут отправлять ID после соединения.

Заключение

При выборе подхода учтите, что NFC сильно зависит от окружающей среды и наличия физических устройств рядом. Если возможно, протестируйте оба метода и выберите наиболее удобный для конечного пользователя и легкий в реализации. Если ваше приложение должно работать на кросс-платформенной основе, BLE будет более перспективным решением.

Оцените материал
Добавить комментарий

Капча загружается...