BLE(低功耗藍牙)連接不需要系統級配對。傳統藍牙(Classic Bluetooth)才強制要求配對綁定;BLE 採用「連接後再綁定/加密」的按需安全模型。
BluetoothDevice.connectGatt() 直接發起連接,無需預先 createBond();ENCRYPTED,連接後調用 requestConnectionPriority() 或 gatt.requestMtu() 觸發配對對話框,完成一次性綁定;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 時指數退避重試;BLUETOOTH_CONNECT / BLUETOOTH_SCAN 權限。