當前位置:編程學習大全網 - 源碼下載 - Android ble (藍牙低功耗) 中的坑和技巧

Android ble (藍牙低功耗) 中的坑和技巧

new ScanFilter.Builder().setServiceUuid(ParcelUuid.fromString("00007777-0000-1000-8000-00805f9b34fb");

此時可以根據mandufacturerData來匹配自己設定的外圍設備

在BluetoothGattCallback中的關於此問題有三步回調

1、 public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState)

2、 public void onServicesDiscovered(BluetoothGatt gatt, int status)

mBluetoothGatt.discoverServices()執行後得到的callback,如果狀態為GATT_SUCCESS,則可以獲取ble旁支發起廣播的service和descriptor,把廣播設為enable

3、 public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status)

只有這壹步status == BluetoothGatt.GATT_SUCCESS,才可以真正的傳輸數據,如果在第壹步或者第二步就開始傳輸數據,會在某些特定的case下導致未知的bug或者空指針錯誤

所以,在中心設備跟外圍開始連接後,妳可以設定壹個超時時間,在超時時間過後,依然沒能回調onDescriptorWrite並獲得BluetoothGatt.GATT_SUCCESS,則此次過程失敗,妳可以根據實際情況進行重連或者提示錯誤

如果要傳輸大於20字節的數據怎麽辦?

1、 系統mtu可以支持修改到512字節,完成大數據量的傳輸。但是由於涉及到中心和旁支都需要修改,會造成很大的局限性和底層修改量,而且會觸發比如某些設備第壹次修改不生效,另壹個設備壹次連接中只能修改壹次等bug,非常不可取,十分不建議。

2、分包傳輸,自己設計協議分包傳輸是最可取的方案,需要註意的是在分包後,每壹個包之間寫入數據需要設置間隔,比如100ms。

在做好5和6的基礎上,依然會在壹些設備上出現,由於系統原因,ble剛開始的發送第壹個數據出現丟包,請對此做出特殊處理。

  • 上一篇:什麽是成人用品
  • 下一篇:市場監督管理行政處罰程序規定
  • copyright 2024編程學習大全網