實際上目前我正在數據庫中存儲藍牙低功耗設備地址。所以用戶可以隨時點擊listview並從設備獲取值。現在沒有機制去除設備(如果設備不在範圍內(掃描中未找到))。因爲我們提供的功能,用戶可以得到以前的歷史價值,如果設備沒有在屏幕範圍內。所以用戶自來水從數據庫中檢索地址,並使用BluetoothLowEnergy Range問題android
mBluetoothAdapter.getRemoteDevice(bleAddress);
方法,以獲取進一步的操作BluetoothDevice類對象像connectgatt等但根據谷歌文檔getRemoteDevice(bleAddress)
返回設備對象,即使設備不在根據谷歌文檔範圍。
即使此適配器從未見過該設備,BluetoothDevice也會始終返回有效硬件地址 地址。
那麼我該如何檢查設備是否在範圍內。我可以嘗試把計時器,但它不是很好的選擇,請給我一些更多的想法。
[更新] 好,我發現周圍的一些工作,如果我嘗試連接其不在範圍內。所以後狀態斷開一段時間的Android已經可用的設備地址133
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status,
int newState) {
if(status==133){
Intent intent=new Intent(FetchBluetoothCharacteristicService.DEVICE_NOT_RANGE);
sendBroadcast(intent);
}
if (newState == BluetoothProfile.STATE_CONNECTED) {
Log.d(TAG, "GATT DEVICE CONNECTED");
Log.d(TAG,
"And Attempting to start service discovery:"
+ gatt.discoverServices());
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
close();
Intent intent=new Intent(FetchBluetoothCharacteristicService.DEVICE_DISCONNECTED);
intent.putExtra(COUNTER, counter);
sendBroadcast(intent);
}
}
感謝您的回覆,但如果 實際rssi值只檢索設備連接。 讀取連接的遠程設備的RSSI。 和因爲android api問題。反覆使用開始和停止掃描來獲取rssi值。並且結果不準確 – mcd
BLE廣告數據包包含一個RSSI值,您可以通過掃描(與設備沒有實際連接)獲得這些數據包。我不熟悉Android,所以我不知道你是否或者在哪裏可以獲得這些價值。 –
其實你是對的,但在Android設備不會反覆播出。所以我們必須重複開始和停止掃描。所以一些時間設備需要花時間播放設備..所以我不知道如何管理這個? – mcd