Tôi đang cố gắng kết nối với một nhiệt kế Bluetooth LE. Kết nối với thiết bị đang hoạt động tốt. Phần duy nhất treo tôi lên là gattCallBack và nó là onCharacteristicChanged/Read. 'setNotification' và descriptor 'setValue' và 'writeDescriptor' đều trả về true. OnCharacteristicChanged không bao giờ được gọi để trả về một giá trị.Android BLE onCharacteristicRead and onCharacteristicChanged không bao giờ được gọi là
Tôi đã sử dụng một chương trình nhỏ khá tiện dụng từ Cửa hàng Play có tên BLE Scanner để giúp tôi cung cấp thêm thông tin về thiết bị cũng như các dịch vụ và đặc điểm của nó.
Đây là lý do tại sao tôi chỉ đơn giản là cứng mã hoá dịch vụ 2, đặc điểm 0. Tôi chỉ dường như không thể tìm ra lý do tại sao sau khi tôi writeDescriptor, tôi không bao giờ nhìn thấy bất cứ điều gì trở lại. Điều thú vị là, tôi có thể sử dụng một số đặc điểm khác (một là Nhiệt độ khoảng thời gian) và tôi nhận được phản hồi (mặc dù dữ liệu bị cắt xén.)
Ngoài ra, ngoài tò mò, tại sao có 2 mô tả về điều này đặc trưng?
Mã này được chứa trong phương pháp MainActivity của tôi. Không chắc chắn nếu điều đó sẽ tạo sự khác biệt ở đây. Tôi đã xem xét và thử một số phương pháp được đăng trên đây mà không có may mắn.
private final BluetoothGattCallback gattCallback = new BluetoothGattCallback()
{
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState)
{ ... }
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status)
{
mGatt = gatt;
List<BluetoothGattService> services = mGatt.getServices();
Log.i("onServicesDiscovered", services.toString());
BluetoothGattCharacteristic characteristic = services.get(2).getCharacteristics().get(0);
mGatt.setCharacteristicNotification(characteristic, true);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString(CLIENT_CHARACTERISTIC_CONFIG));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
mGatt.writeDescriptor(descriptor);
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status)
{ ... }
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic)
{ ... }
};
CẬP NHẬT: Tôi quyết định kiểm tra phương thức onDescriptorWrite và Đăng nhập một số thông tin.
@Override
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status)
{
Log.i("descriptorWRITE", Integer.toString(status));
}
Điều thú vị ở đây là trạng thái trở lại 13 là 'Thao tác ghi vượt quá độ dài tối đa của thuộc tính'.
Tôi sẽ xem xét thêm về điều này.