首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android BLE 藍牙連接:是否必須配對?官方機制與實踐指南

     編輯:程式設計疑難解答

結論先行

BLE(低功耗藍牙)連接不需要系統級配對。傳統藍牙(Classic Bluetooth)才強制要求配對綁定;BLE 採用「連接後再綁定/加密」的按需安全模型。

官方文檔依據

  • BluetoothDevice.connectGatt() 直接發起連接,無需預先 createBond();
  • 若特徵值聲明 ENCRYPTED,連接後調用 requestConnectionPriority() 或 gatt.requestMtu() 觸發配對對話框,完成一次性綁定;
  • Android 6.0+ 引入 BluetoothLeScanner,掃描與連接完全分離,更無配對前置要求。

常見誤區來源

網上部分教程混淆了 Classic Bluetooth 與 BLE 流程,或為了簡化演示在連接前顯式調用 createBond(),導致開發者誤以為「必須配對」。

正確連接流程

// 1. 掃描
bluetoothLeScanner.startScan(scanCallback);

// 2. 掃描回調中獲取 device
BluetoothGatt gatt = device.connectGatt(context, false, gattCallback);

// 3. GattCallback 中處理連接狀態
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
    if (newState == BluetoothProfile.STATE_CONNECTED) {
        gatt.discoverServices(); // 發現服務
    }
}

// 4. 服務發現後讀寫特徵值
// 若特徵需加密,此時系統會彈出配對對話框,用戶確認後自動完成綁定

最佳實踐

  • 掃描使用 ScanFilter 縮小範圍,降低功耗;
  • 連接參數 autoConnect=false 直連,true 為背景自動重連;
  • 實現重連邏輯:onConnectionStateChange 中 STATE_DISCONNECTED 時指數退避重試;
  • 適配 Android 12+ BLUETOOTH_CONNECT / BLUETOOTH_SCAN 權限。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved