我正在开发一个应用程序,我必须在其中连接到 Android 4.3 上的蓝牙设备。
我可以使用 BluetoothGatt.readRemoteRssi() 连接到 BLE 设备并从设备中读取 RSSI。
我想一次读取我连接的多个设备的 RSSI 但我只能读取我上次连接的设备的 BLE 设备的 RSSI。
如果有两个 BLE 设备 A 和 B。我连接到设备 A,并从中读取 RSSI。连接到设备 B后,我可以从设备 B读取 RSSI 。但它不读取设备 A的 RSSI ,它只读取设备 B的 RSSI 。
在Main.java中,它列出了我连接的所有设备。
当我单击列表中的设备时,它将设备名称和地址传输到DeviceControl.java。
final Intent qintent = new Intent(this, DeviceControl.class);
devicelist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
HashMap<String, Object> select = (HashMap<String, Object>) devicelist.getItemAtPosition(arg2);
String name = (String) select.get("name");
String address = (String) select.get("address");
qintent.putExtra(DeviceControl.EXTRAS_DEVICE_NAME, name);
qintent.putExtra(DeviceControl.EXTRAS_DEVICE_ADDRESS, address);
startActivity(qintent);
}
});
DeviceControl.java将调用BluetoothLeService.java并连接到设备。
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder service) {
// TODO Auto-generated method stub
mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService();
if(!mBluetoothLeService.initialize()) {
Log.e(TAG, "Unable to initialize Bluetooth");
finish();
}
registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());
mBluetoothLeService.connect(mDeviceAddress);
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
// TODO Auto-generated method stub
mBluetoothLeService = null;
}
};
BluetoothLeService.java将连接到设备。
public boolean connect(final String address) {
if (mBluetoothAdapter == null || address == null) {
Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
return false;
}
if(mBluetoothDeviceAddress != null && address.equals(mBluetoothDeviceAddress)
&& mBluetoothGatt != null) {
Log.d(TAG, "Trying to use an existing mBluetoothGatt for connection.");
if(mBluetoothGatt.connect()) {
mConnectionState = STATE_CONNECTING;
return true;
}else {
return false;
}
}
final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
if(device == null) {
Log.w(TAG, "Device not found. Unable to connect");
return false;
}
mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
Log.d(TAG, "Try to create a new connection");
mBluetoothDeviceAddress = address;
mConnectionState =STATE_CONNECTING;
return true;
}
连接到设备后,我可以使用 readRemoteRssi 从设备读取 RSSI。
public void readRemoteRssi() {
mBluetoothGatt.readRemoteRssi();
}
但它只读取我连接的最后一个设备的 RSSI。
当我看到日志时,它总是将onCharacteristicWrite和 readRemoteRssi()发送到我连接的最后一个设备。
在我想读取 RSSI 或将 CharacteristicWrite 值写入第一个设备之前,我应该重新连接 GATT 还是将设备重新连接到第一个地址?
是否有其他方法可以读取我已连接的所有设备的 RSSI?