1.如何读取一次,定定位代码我连接的多个设备的rssi值
如何读取一次,我连接的多个设备的rssi值
我在开发一个应用程序,需要连接到 Android 4.3 设备上的位源蓝牙设备。我能够通过 BluetoothGatt.readRemoteRssi() 方法从设备中获取 RSSI 值。定定位代码现在,位源我想要同时获取多个已连接设备的定定位代码拼多多源码平台 RSSI 值。然而,位源超前买入公式源码我注意到每次只能获取到最后连接的定定位代码设备的 RSSI 值。例如,位源假设有两个 BLE 设备 A 和 B。定定位代码我首先连接到设备 A 并获取其 RSSI 值。位源然后,定定位代码我连接到设备 B,位源并且能够获取到设备 B 的定定位代码b站ssm源码 RSSI 值。但是位源,我无法获取到设备 A 的定定位代码 RSSI 值,而是只能获取到设备 B 的 RSSI 值。
在 Main.java 文件中,塞尔达官方源码我列出了所有已连接设备的位置。当我在列表中点击一个设备时,会将设备的名称和地址传递到 DeviceControl.java 文件。
```java
final Intent qintent = new Intent(this,bbs实训源码 DeviceControl.class);
HashMap select = (HashMap) 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 文件并连接到设备。
```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 文件负责连接到设备。
```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 值。
```java
public void readRemoteRssi() {
mBluetoothGatt.readRemoteRssi();
}
```
然而,我注意到每次只能读取到最后连接的设备的 RSSI 值。当我查看日志时,我发现它总是发送 onCharacteristicWrite 和 readRemoteRssi() 调用到我最后连接的设备。为了解决这个问题,我考虑了以下几种方法:
1. 创建多个 BluetoothGatt 对象来分别连接多个设备,并逐一调用 readRemoteRssi() 方法。
```java
BluetoothGatt mBluetoothGatt1 = device1.connectGatt(this, false, mGattCallback);
BluetoothGatt mBluetoothGatt2 = device2.connectGatt(this, false, mGattCallback);
```
这种方法的缺点是它比较繁琐,并且需要管理多个 BluetoothGatt 对象。另一种解决方案是重新连接到第一个设备,然后再尝试读取或写入 CharacteristicWrite 值的设备。这样可以确保我能够读取所有已连接设备的 RSSI 值。