Как заставить мое приложение отправлять запрос на сопряжение Bluetooth через NFC? - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь подключить два устройства Android (M & O) к Bluetooth через NFC, и только сейчас мне удалось заставить его работать частично после нескольких недель поиска в Google, проб и ошибок и еще одного поиска в Google. На данный момент я получил устройства для успешного сопряжения при отправке следующего сообщения NDEF:

// Kotlin code where the 0x7F's are replaced with the sender's BT MAC in little-endian order
val msg = NdefMessage(NdefRecord.createMime("application/vnd.bluetooth.ep.oob", byteArrayOf(0x08, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F)));

Это работает только потому, что я жестко закодировал MAC-адрес BT в записи NDEF. На устройстве M я могу получить MAC программно, но это не хорошо для устройств O. Кроме того, этот метод требует разрешения пользователя, и я подумал, что предыдущие рабочие примеры полностью обошли пользователя

В любом случае, мои вопросы:

  • Есть ли способ заставить Android генерировать запрос на сопряжение от моего имени, поскольку он знает MAC-адрес Bluetooth, но я не знаю (или, по крайней мере, не использую устройства, отличные от моего)
  • Если это так, будет ли это означать, что у пользователя больше не запрашивается подтверждение сопряжения?

Если я не могу заставить Android отправлять MAC, то все это упражнение бессмысленно, так как я все равно не смогу получить MAC-адреса устройств O в дикой природе. Кроме того, если я не могу соединить его, не спросив у пользователя разрешения, тогда какой смысл? Процесс сопряжения запускается автоматически, просто открывая сокет с известным MAC-адресом BT, и который (если я его даже знаю) может быть отправлен любым произвольным / проприетарным сообщением NFC

Любая помощь по этому вопросу будет принята с благодарностью, потому что документы по NFC для Android абсолютно бесполезны на этом этапе, и каждый онлайн-пример, который мне удалось найти, является древним или предполагает, что BluetoothAdapter.getAddress () по-прежнему возвращает действительный адрес

...