2014-06-23 114 views
1

我想連接到藍牙設備,並以最快的方式寫入特性值。現在我的代碼給出了不好的結果:藍牙LE連接時間/緩存

1)BLE掃描 - 正如你可以看到我有硬編碼MAC地址的設備,我想連接到。我也獲得connectGatt方法調用的時間戳。

@Override 
    public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) { 

     if(device.getAddress().equals("F1:9F:EE:6B:AB:83")) { 
      mConnectedGatt = device.connectGatt(this, false, mGattCallback); 
      start = System.currentTimeMillis()/1000; 
     }; 
    } 

2)onConnectionChanged - 我得到enother時間戳和它們。減去結識很多連接操作如何持續

@Override 
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { 
     super.onConnectionStateChange(gatt, status, newState); 

     end = System.currentTimeMillis()/1000; 
     Log.d("QWERTY", "TIME " + (end - start)); 

     if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) { 

      Log.d("QWERTY","Success"); 
      gatt.discoverServices(); 

     } else if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_DISCONNECTED) { 

      Log.d("QWERTY","Disconnected"); 

     } else if (status != BluetoothGatt.GATT_SUCCESS) { 
      Log.d("QWERTY","Connection error"); 
      gatt.disconnect(); 
     } 
    } 

還有我的主要問題是。 device.connectGatt和onConnectionStateChange之間的時間需要3到8秒,這對我來說太長了。如果它在1秒左右,我會很高興。 寫入特徵在onServicesDiscovered偵聽器中佔用的時間少於秒,所以它不是問題。

問題1):有什麼辦法可以使連接時間更快?

問題2)有沒有辦法將藍牙連接與設備存儲在緩存中,所以它在第一次連接時會持續很長時間,在以後的調用中會更快?

問題3):有什麼可以使其工作更快的建議?也許我的做法很糟糕。

回答

2

1)是您的外設必須在連接上提供更好的連接間隔參數。在發現服務/特性後,如果需要,您可以再次減慢速度以節省長時間連接的電量。

2)綁定可能有助於未來的連接。 3)如果你有很多服務/特性,那麼發現它們並在下層堆棧中生成句柄表需要更長的時間。使用iOS時,您應該發送20ms(32)和40ms(64)的最小連接間隔,但您可以用10ms-20ms的速度對其進行破解,您將獲得18-19ms的間隔。 在Android上,這可能過於激進,可能會導致三星拒絕。所以試試[20; 40ms]

+0

謝謝你的迴應。我會嘗試一些事情,讓你知道如果幫助:) – F1sher