1.如何读取一次,定定位代码我连接的多个设备的rssi值
如何读取一次,我连接的多个设备的rssi值
我在开发一个应用程序,需要连接到 Android 4.3 设备上的位源蓝牙设备。我能够通过 BluetoothGatt.readRemoteRssi() 方法从设备中获取 RSSI 值。定定位代码现在,位源我想要同时获取多个已连接设备的定定位代码Go GC 源码 RSSI 值。然而,位源udp p2p 源码我注意到每次只能获取到最后连接的定定位代码设备的 RSSI 值。例如,位源假设有两个 BLE 设备 A 和 B。定定位代码我首先连接到设备 A 并获取其 RSSI 值。位源然后,定定位代码我连接到设备 B,位源并且能够获取到设备 B 的定定位代码仿163源码交易平台 RSSI 值。但是位源,我无法获取到设备 A 的定定位代码 RSSI 值,而是只能获取到设备 B 的 RSSI 值。
在 Main.java 文件中,英雄难过棍子关 源码我列出了所有已连接设备的位置。当我在列表中点击一个设备时,会将设备的名称和地址传递到 DeviceControl.java 文件。
```java
final Intent qintent = new Intent(this,北京赛车pk10 源码 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 值。