Estoy trabajando en la implementación de una aplicación para Android que se conecta a dispositivos BLE, pero la falta de documentación apropiada me está matando. Nada parece estar funcionando de la misma manera dos veces si funciono con la aplicación una vez que podría funcionar, pero la próxima vez que se detiene en algún lugar (ni idea de dónde) pero poco llegó a una conclusión que yo no he estado usando disconnect()
y close()
en el orden correcto.
Después digamos una desconexión de llamada error de E () en primer lugar:
public void disconnect() {
mScanning = true;
mConnected = false;
startedConnect = false;
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
scanLeDevice(true);
return;
}
mBluetoothGatt.disconnect();
scanLeDevice(true);
}
entonces yo llamo close ():
public void close() {
if (mBluetoothGatt == null) {
return;
}
mBluetoothGatt.close();
mBluetoothGatt = null;
}
Es esta la forma correcta de hacerlo o no? Tenga en cuenta que yo estoy llamando a scanLeDevice(true);
la derecha después de desconectar pero entonces close()
se llama que creo que es justo "terminando" todo y se detiene el derecho de exploración?
Cuando se crea un BluetoothGatt
objeto llamando connectGatt
en una BluetoothDevice
, usted afirma uno de los 32 (en la actual versión de Android) ranuras disponibles en la pila de Bluetooth.
En este objeto ahora se puede llamar connect
y disconnect
cambiar el estado de la "meta" si Android debe tratar de mantener una conexión con el dispositivo o no. Hasta que llame disconnect
, Android (para siempre) intentará conectar con el dispositivo y vuelva a conectar automáticamente al dispositivo si la conexión se interrumpe por cualquier razón. Llamando connect
de nuevo después disconnect
lo hará intente conectarse de nuevo.
Nota: la configuración autoConnect
de false
la primera connectGatt
llamada se establecerá un tiempo de espera inicial para el primer intento de conexión implícita (generalmente 30 segundos), y si se conecta el dispositivo y la conexión se corta después, no intentará volver a conectarse automáticamente.
Por lo que el BluetoothGatt
objeto puede estar en el estado "desconectado", pero siguen ocupando una de las 32 ranuras de la pila Bluetooth. Cuando se llama close
, se libera todos los recursos para el BluetoothGatt
objeto y regresa a la ranura de la pila de Bluetooth. Un cierre por lo tanto, implícitamente también significa desconexión. Para solucionar potencialmente algunos dispositivos Android con errores, se podría llamar disconnect
en el BluetoothGatt
objeto antes close
. Tenga en cuenta que una vez que haya llamado close
, no se puede llamar a cualquier otro método de ese BluetoothGatt
objeto.
Nota: apagar mediante Bluetooth destruyendo todos los BluetoothGatt
objetos de forma automática.
Volviendo a su pregunta, yo realmente no entender lo que su digitalización BLE tiene que ver con la conexión / desconexión / cierre. La exploración es totalmente independiente de las conexiones y BluetoothGatt
los objetos y no hay problemas con el que está conectado y la realización de una exploración al mismo tiempo. Para detener la exploración, llamada stopScan
en el BluetoothLeScanner
.