2014-01-09 37 views
1

實際上目前我正在數據庫中存儲藍牙低功耗設備地址。所以用戶可以隨時點擊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); 
      } 
    } 

回答

0

燦你看看RSSI看它是否在範圍內?

https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html#readRemoteRssi%28%29

這將告訴你該設備的接收信號強度 - 或者FALSE如果它不能被發現。

+0

感謝您的回覆,但如果 實際rssi值只檢索設備連接。 讀取連接的遠程設備的RSSI。 和因爲android api問題。反覆使用開始和停止掃描來獲取rssi值。並且結果不準確 – mcd

+0

BLE廣告數據包包含一個RSSI值,您可以通過掃描(與設備沒有實際連接)獲得這些數據包。我不熟悉Android,所以我不知道你是否或者在哪裏可以獲得這些價值。 –

+0

其實你是對的,但在Android設備不會反覆播出。所以我們必須重複開始和停止掃描。所以一些時間設備需要花時間播放設備..所以我不知道如何管理這個? – mcd