2017-03-09 224 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 **的错误,可以像这样绕过。 –