1、代码解除绑定
直接找不到removeBond方法,通过Method来调用。亲测可用
Method method= null; try { method = bluetoothGatt().getDevice().getClass().getMethod("removeBond",(Class[])null ); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } try { method.invoke(bluetoothGatt().getDevice(),(Object[]) null); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); }
2、写入数据是会发现修改了MTU也没用,查看后台提示信息发现提示如下:
Skipped 1012 frames! The application may be doing too much work on its main thread.
这是由于未清除缓存造成字节流太大,发送失败或者是蓝牙未正确接收到信息,此时需要清除缓存 ,一种方法是直接关闭手机蓝牙再打开,一种是在代码中来清除,清除方法也是不能直接调用,采用上述1的方法来实现即可。
public boolean clear(){ try { Method localMethod = bluetoothGatt.getClass().getMethod("refresh"); if (localMethod != null) { return (Boolean) localMethod.invoke(bluetoothGatt); } } catch (Exception localException) { System.out.println("清除异常"); } return false; }
3、发送类别对应,测试之后发现有些蓝牙需要,有些不需要。
charaWrite.setValue(data); //无需返回 charaWrite.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
//需要有返回
charaWrite.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT);
更多蓝牙开发问题可给我留言。