Open android1601 opened 7 years ago
读写操作成功的前提是:首先你需要连接成功,在连接成功后要发现服务,只有服务获取到之后才可以进行读写操作以及通知,否则都是不能成功的。另外在进行读写操作时不要连续请求,记得做延时,连续请求可能导致设备忙,造成你第一次的读写操作可能没有问题,但是紧接着的读写就会不成功,由于设备忙碌。希望对你有帮助,请按照这个思路检查你自己的代码逻辑。
已经显示连接成功并发现服务,获取服务以下是我添加的代码: private void setBleServiceListener() { mBleService.setOnServicesDiscoveredListener(new BleService.OnServicesDiscoveredListener() { @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { gattServiceList = gatt.getServices(); serviceList.clear(); for (BluetoothGattService service : gattServiceList) { String serviceUuid = service.getUuid().toString(); serviceList.add(MyGattAttributes.lookup(serviceUuid, "Unknown") + "\n" + serviceUuid); Log.i(TAG, MyGattAttributes.lookup(serviceUuid, "Unknown") + "\n" + serviceUuid);
mCharacteristics = service.getCharacteristics();
String[] charArra = new String[mCharacteristics.size()];
for (int i = 0; i < mCharacteristics.size(); i++) {
String charUuid = mCharacteristics.get(i).getUuid().toString();
charArra[i] = MyGattAttributes.lookup(charUuid, "Unknown") + "\n" + charUuid;
}
characteristicList.add(charArra);
}
mBleService.setCharacteristicNotification(mCharacteristics.get(0),true);//设置通知
mHandler.sendEmptyMessage(SERVICE_SHOW);
}
}
});
mBleService.setOnReadRemoteRssiListener(new BleService.OnReadRemoteRssiListener() {
@Override
public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
Log.i(TAG, "onReadRemoteRssi: rssi = " + rssi);
}
});
//此处省略了单击事件处理
mBleService.readCharacteristic(mCharacteristics.get(0));//读取数据
mBleService.writeCharacteristic(mCharacteristics.get(0),"hello");//写入数据
//Ble数据回调
mBleService.setOnDataAvailableListener(new BleService.OnDataAvailableListener() {
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
//处理特性读取返回的数据
Log.i("TAG","onCharacteristicRead" + characteristic.getValue().toString());
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
//处理通知返回的数据
Log.i("TAG","onCharacteristicChanged" + characteristic.getValue().toString());
}
@Override
public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
Log.i("TAG","onDescriptorRead" + descriptor.getValue().toString());
}
});
}
但是还是不能读写成功,还望指正,谢谢。
读写操作之间记得做延时,如之前提示你的那样
嗯嗯,我已经在读写操作之间,开启新的线程开启延时了,不过貌似还是没有得到响应。还请大神指点
你好 我是用Google sample去改 請問一下,我有設通知(notification) BLE 每50ms傳值給我 我的oncharacteristicchange就會觸發 裡面再啟動broadcastreceiver 我在broadcastreceiver裡再做write 一開始都正常的寫入 加上我有等callback好了才再執行 所以沒有衝突 但是剛開始都寫入好好的 之後可能幾分鐘之後 就不寫入了 Callback status顯示133 你有遇過這個問題嗎? 感謝
我也是读取不到设备返回的数据 请问题主解决了吗
mBleService.setCharacteristicNotification();//设置通知
mBleService.readCharacteristic();//读取数据
mBleService.writeCharacteristic();//写入数据 调用以上三个方法却没有任何响应,还请指点一下,谢谢。