2017-03-09 221 views
1

我有兩個的Android BluetoothDevice類createBond權限錯誤

<uses-permission android:name="android.permission.BLUETOOTH"/> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 

一個項目在它我撥打電話使用掃描BT設備(簡體):

final BluetoothLeScanner scanner = BluetoothAdapter.getDefaultAdapter() 
     .getBluetoothLeScanner() 
ArrayList<ScanFilter> scanFilters = ArrayList<>(); 
scanFilters.add(new ScanFilter.Builder() 
     .setServiceUuid(new ParcelUuid(MY_SERVICE_UUID)) 
     .build()); 
ScanSettings scanSettings = new ScanSettings.Builder() 
     .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) 
     .build(); 
ScanCallback scanCallback = new ScanCallback() { 
    @Override 
    void onScanFailed(int errorCode) {} 
    @Override 
    void onScanResult(int callbackType, ScanResult result) { 
     result.getDevice().createBond(); 
     scanner.stopScan(this); 
    } 
    @Override 
    public void onBatchScanResults(List<ScanResult> results) {} 
}; 
scanner.startScan(scanFilters, scanSettings, scanCallback); 

要點是,我掃描對於我的服務的設備,現在只是粘在我看到的第一個設備上。我所有的特徵和描述符都使用讀/寫加密權限(我不知道這是否重要)。我最後看到的是兩個設備上的配對屏幕,但後來當我用connectGatt方法我失敗,出現以下錯誤:

E/bt_btif: bta_gattc_cache_load: can't open GATT cache file /data/misc/bluetooth/gatt_cache_76fe0b7bf8dd for reading, error: No such file or directory 
E/bt_att: gatt_disc_cmpl_cback() - Unable to register for service changed indication 

如果,另一方面,我打開BT設置和粘接設備從那裏,一切都很好! connectGatt的作品,我可以隨心所欲地讀/寫數據。

我在做什麼錯createBond()

+0

我現在有完全相同的問題。你找到解決方案嗎? –

+0

看起來我們已經做到了,儘管仍然沖淡了最終的細節。見下面的答案。 – TheHebrewHammer

回答

2

看起來叫BluetoothDevice.createBond()使用BluetoothDevice.TRANSPORT_AUTO創建債券。這不適用於所有Android平臺,並且很脆弱。相反,使用用於掃描設備的特定傳輸進行通話確實有竅門。

device.createBond(BluetoothDevice.TRANSPORT_LE) 
+0

您是否嘗試多次重試'createBond()'方法以查看它是否經過?你可能會得到一個** 137 **的錯誤,可以像這樣繞過。 –