Android BluetoothDevice createBond权限错误

时间:2017-03-09 20:52:33

标签: android android-bluetooth

我有两个项目

<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);

要点是我使用我的服务扫描设备,现在只需绑定到我看到的第一个设备。我的所有特征和描述符都使用了read / write_encrypted权限(我不知道这是否重要)。我最终看到的是两个设备上的配对屏幕,但后来当我使用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()我做错了什么?

1 个答案:

答案 0 :(得分:2)

似乎调用BluetoothDevice.createBond()使用BluetoothDevice.TRANSPORT_AUTO来创建绑定。这并不适用于所有Android平台并且很脆弱。相反,使用用于扫描设备的特定传输进行呼叫就可以了。

device.createBond(BluetoothDevice.TRANSPORT_LE)