我可以通過使用BluetoothGatt.readRemoteRssi()連接到BLE設備並從中讀取RSSI。
我想在連接後讀取多個設備,但我只能在上次連接設備時讀取BLE RSSI公司的RSSI設備。
如果有兩個BLE設備A和b,我連接到A的設備並讀取RSSI。之後,我連接到設備B,我可以從設備B讀取RSSI..但是它不讀取設備A的RSSI,只能從設備B讀取RSSI..
在Main.java,它會列出連接位置的所有設備。
當我點擊列表上的設備時,它會將設備的名稱和地址發送到DeviceControl.java。
最終意向qintent =新意向(this,device control . class);
device list . setonitemclicklistener(new OnItemClickListener(){
@覆蓋
public void onItemClick(adapter view & lt;?& gtarg0,View arg1,int arg2,
long arg3) {
// TODO自動生成的方法存根
HashMap & lt字符串,對象& gtselect =(HashMap & lt;字符串,對象& gt)device list . getitematposition(arg 2);
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,地址);
start activity(Qin tent);
}
});
DeviceControl.java會打電話給BluetoothLeService.java並連接到設備上。
private final service connection mServiceConnection = new service connection(){
@覆蓋
public void onServiceConnected(component name component name,IBinder service) {
// TODO自動生成的方法存根
mBluetoothLeService =((bluetooth leservice。LocalBinder)服務).getService();
如果(!mbluetoothleservice . initialize()){
Log.e(標簽,“無法初始化藍牙”);
finish();
}
register receiver(mGattUpdateReceiver,makegatupdateintentfilter());
mbluetoothleservice . connect(mDeviceAddress);
}
@覆蓋
public void onServiceDisconnected(component name component name){
// TODO自動生成的方法存根
mBluetoothLeService = null
}
};
BluetoothLeService.java將連接到設備。
公共布爾連接(最終字符串地址){
if(mBluetoothAdapter = = null | | address = = null){
Log.w(標簽,“BluetoothAdapter未初始化或未指定地址。”);
返回false
}
if(mBluetoothDeviceAddress!= null & amp& ampaddress . equals(mBluetoothDeviceAddress)
& amp& ampmBluetoothGatt!= null) {
Log.d(標簽,“嘗試使用現有的mBluetoothGatt進行連接。”);
if(mBluetoothGatt.connect()) {
mConnectionState = STATE _ CONNECTING;
返回true
}否則{
返回false
}
}
final bluetooth device device = mbluetoothadapter . getremote device(地址);
if(device == null) {
Log.w(標簽,“未找到設備。無法連接”);
返回false
}
mBluetoothGatt = device . connect GATT(this,false,mGattCallback);
Log.d(標簽,“嘗試創建新連接”);
mBluetoothDeviceAddress =地址;
mConnectionState = STATE _ CONNECTING;
返回true
}
連接到設備後,我可以使用readRemoteRssi從設備中讀取Rssi。
public void readRemoteRssi() {
mbluetoothgatt . readremoterssi();
}
但它只能讀取我連接的最後壹個設備的RSSI。
當我看到日誌時,它總是向我連接的最後壹個設備發送onCharacteristicWrite和readRemoteRssi()。
我應該重新連接到GATT,或者在我希望RSSI讀取或寫入第壹個設備的特性寫入值之前,重新連接到設備概述的第壹個地址。
它沒有其他方法來讀取我連接的所有設備的RSSI概述。
溶液1:
分離多個BluetoothGatt對象連接多個設備,逐個調用readRemoteRssi。
在懶惰和糟糕的例子中,您應該能夠將那些BluetoothGatt對象放入數組中。
bluetooth GATT mbluetoothgatt 1 = device 1 . connect GATT(this,false,mGattCallback);
bluetooth GATT mbluetoothgatt 2 = device 2 . connect GATT(this,false,mGattCallback);