¿Cómo leo los valores rssi de varios dispositivos a los que estoy conectado a la vez?
Puedo conectarme al dispositivo BLE y leer RSSI usando BluetoothGatt.readRemoteRssi().
Quiero leer varios dispositivos después de conectarme, pero solo puedo leer el dispositivo RSSI de la empresa BLE RSSI cuando el dispositivo se conectó por última vez.
Si hay dos dispositivos BLE A y B, me conecto al dispositivo de A y leo el RSSI. Después de eso, me conecto al dispositivo B y puedo leer RSSI desde el dispositivo B. Pero no lee RSSI del dispositivo A, solo puede leer RSSI desde el dispositivo B.
En Main.java , Enumerará todos los dispositivos conectados a la ubicación.
Cuando hago clic en un dispositivo de la lista, envía el nombre y la dirección del dispositivo a DeviceControl.java.
Intento final qintent = nuevo intento (este, control de dispositivo. clase);
lista de dispositivos setonitemclicklistener(new OnItemClickListener(){
@override p>
p>
public void onItemClick(vista del adaptador <?& gtarg0, View arg1, int arg2,
long arg3) {
//TODO automáticamente código auxiliar del método generado
HashMap<String,Object>select =(HashMap<String,Object>)device list.getitematposition(arg 2);
String nombre =(String )select get(" nombre ". );
Dirección de cadena =(Cadena)select . get(" dirección ");
qintent.putExtra(DeviceControl.EXTRAS_DEVICE_NAME, NAME;
qintent); .putExtra(DeviceControl.EXTRAS_DEVICE_ADDRESS, dirección);
iniciar actividad(tienda Qin
}
}); .java llamará a BluetoothLeService.java y se conectará al dispositivo.
conexión de servicio final privada mServiceConnection = nueva conexión de servicio(){
@override
public void onServiceConnected(nombre del componente nombre del componente, servicio IBinder) { p>
//TODO código auxiliar de método generado automáticamente
mBluetoothLeService =((bluetooth leservice.
LocalBinder) service).getService();
if (!mbluetoothleservice.initialize()){
Log.e(tag, "No se puede inicializar Bluetooth");
finish();
}
registrar receptor(mGattUpdateReceiver, makegatupdateintentfilter());
mbluetoothleservice.connect(mDeviceAddress);
}
@OVERRIDE
public void onServiceDisconnected(nombre del componente nombre del componente){
//TODO código auxiliar de método generado automáticamente
mBluetoothLeService = null
}
};
BluetoothLeService.java se conectará al dispositivo.
Conexión booleana pública (dirección de cadena final){
if(mBluetoothAdapter == null | | dirección == null){
Log.w(tag, "BluetoothAdapter no está inicializado o no tiene ninguna dirección especificada.");
Devuelve falso
}
if(mBluetoothDeviceAddress!= null & amp& ampaddress .quals( mBluetoothDeviceAddress )
&& ampmBluetoothGatt! = null) {
Log.d(Etiqueta, "Intento de conexión utilizando mBluetoothGatt existente.");
if (mBluetoothGatt) .connect()) {
mConnectionState = STATE _ CONNECTING;
Devuelve verdadero
} En caso contrario {
Devuelve falso
}
}
dispositivo bluetooth final = mbluetoothadapter . getremote dispositivo(dirección);
if(dispositivo == null) {
p>Log.w(tag, "Dispositivo no encontrado. No se puede conectar");
Devuelve falso
}
mBluetoothGatt = dispositivo. conectar GATT(this, false, mGattCallback);
Log.d(etiqueta, "Intentando crear una nueva conexión");
mBluetoothDeviceAddress = dirección; > mConnectionState = STATE_CONNECTING;
Devuelve verdadero
}
Después de conectarme al dispositivo, puedo leer Rssi desde el dispositivo usando readRemoteRssi.
public void readRemoteRssi() {
mbluetoothgatt . readremoterssi();
}
Pero solo puede leer el que soy. conectado al RSSI del último dispositivo.
Cuando veo el registro, siempre envía onCharacteristicWrite y readRemoteRssi() al último dispositivo al que me conecté.
¿Debo volver a conectarme a GATT o a la primera dirección de la descripción general del dispositivo antes de querer que RSSI lea o escriba el valor de escritura característico del primer dispositivo?
No tiene otra forma de leer el resumen RSSI de todos los dispositivos que tengo conectados.
Solución 1:
Separe varios objetos BluetoothGatt para conectar varios dispositivos y llame a readRemoteRssi uno por uno.
En el ejemplo perezoso y malo, deberías poder colocar esos objetos BluetoothGatt en una matriz.
bluetooth GATT mbluetoothgatt 1 = dispositivo 1. conecte GATT (este, falso, mGattCallback);
bluetooth GATT mbluetoothgatt 2 = dispositivo 2. conecte GATT (este, falso, mGattCallback);