作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个项目,两者都有
<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);
要点是我使用我的服务扫描设备,现在只需绑定(bind)到我看到的第一个设备。我所有的特征和描述符都使用 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 设置并从那里绑定(bind)设备,一切正常! connectGatt
有效,我可以随意读取/写入数据。
createBond()
我做错了什么?
最佳答案
似乎调用 BluetoothDevice.createBond()
使用 BluetoothDevice.TRANSPORT_AUTO
来创建绑定(bind)。这不适用于所有 Android 平台并且很脆弱。相反,使用用于扫描设备的特定传输进行调用就可以了。
device.createBond(BluetoothDevice.TRANSPORT_LE)
关于Android BluetoothDevice createBond权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705185/
我正在创建一个 Android 应用程序 - 这个应用程序的一个功能是,如果用户连接到 BLE 设备并单击一个按钮,该应用程序将记住该设备并在以后自动连接。据我了解,这意味着我需要建立联系。 我遇到了
我有一些代码可以通过调用 createBond() 自动与蓝牙设备配对,为 android.bluetooth.device.action.PAIRING_REQUEST 注册一个广播接收器,然后手动
我是一名优秀的程序员,十分优秀!