¿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.
- Bluetooth LE Scan no funciona
- Problemas con Android Bluetooth LE Notificaciones
- Android BLE: onServicesDiscovered nunca se dispara en Nexus 5 o Samsung Nota 3
- Cifrado de baja energía de Bluetooth y seguridad de datos
- Android - BLE vinculación programáticamente no funciona en todos CoolPad Nota 3
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?
- 129 error y error 133 de Rxble durante la operación de lectura y escritura
- Android: Envío de datos> 20 bytes by BLE
- Cómo crear UUID de cadena en android
- Envío de más de 20 bytes a través de BLE
- UUID y MACAddress para Bluetooth BLE
- ¿Cómo obtener el nivel de la batería después de conectarse al dispositivo BLE?
- Init conexión sin sincronización utilizando Bluetooth Low Energy en Android
- Podemos usar iBeacon para transferir datos a través de bluetooth en iOS - android?
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,
- Bucle a través de todo el dispositivo disponible.
- 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.
-
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
- Canvas: acercar, cambiar y escalar en Android
- ¿Es posible forzar a los usuarios de versiones de aplicaciones anteriores a actualizar?