Ответ 1
Для обеспечения конфиденциальности, адрес mac продолжает меняться: см. ниже фрагмент кода из спецификации:
5.4.5 Функция конфиденциальности
Bluetooth LE поддерживает функцию, которая уменьшает способность отслеживать устройство LE в течение определенного периода времени, изменяя Адрес устройства Bluetooth часто. Функция конфиденциальности не используется в режиме обнаружения GAP и процедурах, но используется, когда поддерживается в режиме подключения и подключения. В порядке для устройства, использующего функцию конфиденциальности для повторного подключения к известным устройствам, адрес устройства, называемый частным адресом, должен быть разрешимые другим устройством.
Частный адрес создается с помощью устройства, определяющие ключ идентификации (IRK), обмениваемый во время связывания Процедура.
Таким образом, идеальным способом является использование IRK для передачи фактического адреса устройства. Однако я не нашел API для этого.
В настоящее время работа вокруг - которую я использую в mny app для повторного подключения к устройству,
- пройдите через все доступные устройства.
- получить серийный номер no - если серийный номер не совпадает с уже сохраненным номером затем не отсоединяйте соединение.
-
Повторите шаг 2 для всех устройств.
Эта работа будет работать только в том случае, если устройство предоставляет серийный номер через некоторую услугу.
Вы также можете попробовать установить флаг autoconnect равным true, когда вы вызываете connectGatt (контекст контекста, булевский автосоединение, обратный вызов BluetoothGattCallback)
Из документов:
public BluetoothGatt connectGatt (контекст контекста, логический autoConnect, BluetoothGattCallback) Добавлен в уровень API 18
Подключение к серверу GATT, размещенному на этом устройстве. Вызывающий абонент действует как GATT клиент. Обратный вызов используется для предоставления результатов Caller, например статус соединения, а также любые дальнейшие действия клиента GATT. метод возвращает экземпляр BluetoothGatt. Вы можете использовать BluetoothGatt для выполнять операции клиента GATT. Параметры
autoConnect Ли, чтобы напрямую подключиться к удаленному устройству (false) или автоматически как только удаленное устройство станет доступным (true).
Обратный вызов обработчика обратного вызова GATT, который получит асинхронный Обратные вызовы. Выбрасывает исключение IllegalArgumentException, если обратный вызов имеет значение null