¿Cómo puedo volver a conectar mi aplicación en cada apertura al mismo dispositivo bluetooth de baja energía?

Estoy desarrollando una aplicación de Android. Al principio esta aplicación le muestra al usuario una lista de dispositivos bluetooth y cuando elige uno de ellos abre otra actividad.

Mi objetivo es: después de algún día cuando el usuario reabrirá la aplicación de la aplicación tendrá que recordar el dispositivo ble y tiene que tratar de volver a conectar a ella.

Por ahora he conseguido mi meta de esta manera:

  • Memorizo ​​preferentemente la dirección MAC del dispositivo elegido
  • Cuando el usuario reabra la aplicación, la aplicación realiza una exploración oculta e intenta volver a conectarse a un dispositivo con la misma dirección MAC.
  • Para recuperar la dirección del mac Utilizo la función getAddress () (cuando intento conectar con el periférico del androide esta función me da un cierto problema, porque el dispositivo cambia su dirección del MAC en cada comienzo: /)

Hay una mejor manera de obtener lo mismo?

Off topic: La función onScanResult en el ScanResult alguna vez me devuelve un dispositivo nulo, ¿es normal? He utilizado startLeScan (UUID [] serviceUuids, BluetoothAdapter.LeScanCallback callback) y después de lollipop utilizo la nueva versión de la startLeScan con Scanfilter. ¿Puede ser el problema?

Por razones de privacidad, la dirección del mac sigue cambiando, consulte el siguiente fragmento de las especificaciones:

5.4.5 Función de privacidad

Bluetooth LE admite una función que reduce la capacidad de rastrear un dispositivo LE durante un período de tiempo cambiando frecuentemente la dirección del dispositivo Bluetooth. La función de privacidad no se utiliza en el modo y procedimientos de detección de GAP, pero se utiliza, cuando se admite, durante el modo de conexión y los procedimientos de conexión. Para que un dispositivo que utilice la función de privacidad se conecte de nuevo a dispositivos conocidos, la dirección del dispositivo, denominada dirección privada, debe ser resuelta por el otro dispositivo.

La dirección privada se genera utilizando la clave de identidad de resolución del dispositivo (IRK) intercambiada durante el procedimiento de enlace.

Así que la forma ideal es utilizar el IRK para gerar la dirección real del dispositivo. Sin embargo, no encontré ningún API para hacerlo.

En la actualidad, el trabajo en torno a lo que estoy usando en mny app para volver a conectar al dispositivo,

  1. Bucle a través de todo el dispositivo disponible.
  2. Obtener el número de serie – si el número de serie no coincide con el número ya almacenado, a continuación, mantener la conexión de otro modo desconectar.
  3. Repita el paso 2 para todos los dispositivos.

    Este trabajo alrededor sólo funcionará si el dispositivo expone el número de serie a través de algún servicio.

También puede intentar establecer el indicador de autoconectado como true cuando llama a connectGatt (contexto contexto, boolean autoConnect, devolución de llamada de BluetoothGattCallback)

De los documentos:

Público BluetoothGatt connectGatt (Contexto contextual, boolean autoConnect, BluetoothGattCallback callback) Añadido en el nivel 18 del API

Conéctese al servidor GATT alojado en este dispositivo. El llamador actúa como cliente del GATT. La devolución de llamada se utiliza para entregar resultados al llamante, como el estado de la conexión, así como cualquier otra operación del cliente del GATT. El método devuelve una instancia de BluetoothGatt. Puede utilizar BluetoothGatt para llevar a cabo las operaciones del cliente GATT. Parámetros

AutoConnect Ya sea para conectarse directamente al dispositivo remoto (false) o para conectarse automáticamente tan pronto como el dispositivo remoto esté disponible (true).

Callback GATT que recibirá devoluciones de llamada asíncronas. Inicia IllegalArgumentException si callback es null

  • Obtención de datos de byte scanRecord diferentes para el mismo dispositivo BLE al escanear con diferentes versiones del dispositivo android
  • Android 4.3 Bluetooth Baja energía inestable
  • Comunicación robusta con múltiples dispositivos BLE simultáneamente en Android
  • Lista de dispositivos BLE para Android después de escanear dispositivos
  • Android BLE, leer y escribir características
  • "El recurso compartido Bluetooth ha dejado de funcionar" al realizar LeScan
  • ¿Cómo enviar datos a través de un enlace Bluetooth Low Energy (BLE)?
  • Android 4.3 como un periférico Bluetooth LE
  • Cómo forzar Bluetooth LE "Just Works" Emparejamiento en Android
  • Android 4.3 Bluetooth ble no se llama onCharacteristicRead ()
  • Lea las notificaciones cuando toque el botón en el dispositivo BLE
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.