Spanish Evento que detecte la desconexion del BT

cas6678

Active Member
Licensed User
Longtime User
Pues eso, que tengo un BT al que me conecto sin problemas pero luego en caso de que el otro terminal tenga un problema, (por ejemplo se apague) y pierda la conexion, necesito detectarlo para poder intentar un nuevo enlace, a ese o a otro BT.

Supongo que existira pero estoy un poco perdido con esto. Cuando lo hice no lo termine de controlar del todo y encima de eso hace muuuucho tiempo. :p:p:p
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola:

Supongo que el proceso de bluetooth lo habras puesto en un servicio, puedes hacer una llamada cada x tiempo al servicio y hacer un StartDiscovery , y luego en el evento DeviceFound o DiscoveryFinished saber si está conectado, tambien en el evento StateChanged sabrás si tu controlador BT está activo o no, si no lo está tampoco existe emparejamiento.

Saludos
 

josete

Member
Licensed User
Longtime User
Para bluetooth clasico no se ,pero si es un dispositivo BLE y usas libreria BLE2 ,tienes el evento Disconected.
 

cas6678

Active Member
Licensed User
Longtime User
Hola:

Supongo que el proceso de bluetooth lo habras puesto en un servicio, puedes hacer una llamada cada x tiempo al servicio y hacer un StartDiscovery , y luego en el evento DeviceFound o DiscoveryFinished saber si está conectado, tambien en el evento StateChanged sabrás si tu controlador BT está activo o no, si no lo está tampoco existe emparejamiento.

Saludos

Bueno, empezamos mal......no, no lo puse en un servicio......:(:(:(

Lo tengo en la activity principal.

El evento StateChange entiendo que lo que me dice si mi controlador BT esta disponible, (el de mi dispositivo), evidentemente si este no esta no habra conexion, pero lo que necesito saber es cuando se cae el emparejamiento para poder establecer (o intentarlo) una nueva conexion.

DeviceFound tambien lo tengo y con esto busco los BT disponibles. Al igual que DiscoveryFinished para conectar con elegido y StartDiscovery.

No entiendo bien lo de hacer un SartDiscovery cada x tiempo, ¿Cual podria ser esa x? Lo digo porque mi interes es conocer cuando el emperajemiento se rompe y StartDiscovey no sera tan rapido.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola :

No he empleado la libreria BLE2 y no se si el evento Disconected hace referencia al emparejamiento o al controlador de bluetooth, tampoco se que libreria estas utilizando. Por eso te comenté otra forma de saber si hay emparejamiento, yo la utilicé hace tiempo en una aplicación e iba rápida.

Por otro lado, si miro las caracteristicas del evento Disconected de BLE2, creo que no te dice si perdió el emparejamiento, si no que cuando se intentó conectar no pudo, por esto que pone en las especificaciones:
Note that the Disconnected event will be raised if the connection has failed.Connects to a device with the given id. You can only connect to previously discovered devices.
https://www.b4x.com/android/help/ble2.html#blemanager2_disconnect

Basandonos en que no empleas BLE2, primero metes todo lo del BT en un servicio si quieres saber si está emparejado cuando sales de la APP, por que si no los eventos no funcionaran. De esta forma aunque no tengas activa la App seguirá funcionando. Pones en marcha y paras el servicio desde el Activity.

Sabes que un servicio lo puedes llamar cada x tiempo con un StartServiceAt , esa x que hacia referencia en mi anterior respuesta es el tiempo en milisegundos, segundos, minutos, horas... con esto lo llamas cuando te interese, intenta que no sea muy continuo por que consumirás mucha bateria. Si cuando entras en el servicio haces un StartDiscovery podras ver en los eventos DeviceFound o DiscoveryFinished saber si está emparejado el dispositivo que te interesa, y tambien como te comenté, con StateChanged si tu controlador está en marcha. Creeas una variable boolean global que te diga el estado de emparejamiento de ese dispositivo y en los eventos asignas los valores.

Saludos
 

cas6678

Active Member
Licensed User
Longtime User
Entiendo lo del servicio pero yo necesito saber si el BT esta emparejado mientras estoy en la APP y no fuera. Asi que primero voy a intentar entender lo que tengo y luego ya intentare pasarlo al servicio ;)

Lo otro no lo entiendo. El evento DeviceFound me dice los dispositivos disponibles pero nada sobre si yo sigo emparejado con alguno de ellos. Cierto es que si el dispositivo ya no esta disponible es evidente que ya no estare emparejado pero no me resuelve lo que quiero. Supongamos que el BT pierde energia y luego la recobraarse, ya no estoy emparejado pero si hago un StartDiscovery me dira que el dispositivo sigue ahi.

Tambien es verdad que estoy muy pez con esto. Voy a ver si pongo en claro mis ideas y sobre todo, lo que ya tengo, para volver a preguntar con mas detalle.

Gracias @bgsoft
 

josete

Member
Licensed User
Longtime User
Bueno pues acabo de hacer la prueba añadiendo el evento Disconnected con un Log al ejemplo que estaba usando para probar un HC-08 BLE y la libreria BLE2 .Una vez hecha la conexion me he alejado hasta salir de la cobertura (el HC-08 empieza a parpadear) y tal como dice bgsoft ,el evento Disconnected no ha saltado(Si lo hace si desactivo fisicamente el bluetooth del telefono).Desconozco si con la libreria BluetoothAdmin para bluetooth clasico el comportamiento es igual,aunque lo probare en breve con un HC-05 que me acaba de llegar.
 
Top