當前位置:編程學習大全網 - 源碼下載 - 如何讀取我壹次連接的多個設備的rssi值?

如何讀取我壹次連接的多個設備的rssi值?

我正在開發壹個連接到藍牙設備的Android 4.3應用程序。

我可以通過使用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);

  • 上一篇:linux系統能夠直接讀取的分區類型是什麽
  • 下一篇:518源代碼分享
  • copyright 2024編程學習大全網