2016-04-16 14 views
8

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ó.

enter image description here

Đâ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.

Trả lời

4

Tôi đã tìm thấy sự cố ở đây. Tôi đã giả định rằng nhiệt kế đã sử dụng dịch vụ BLE tiêu chuẩn và thiết lập đặc trưng. Không phải vậy. Họ đã tạo ra Đặc tính tùy chỉnh của riêng mình. Khi tôi chuyển sang Đặc điểm đó, phương pháp 'đã thay đổi' bắt đầu kích hoạt.

0

Tôi nghĩ bạn đang thiếu mGatt.readCharacteristic(characteristic).

Khi bạn gọi nó, nó sẽ đợi đọc xong và gọi onCharacteristicRead.

Các vấn đề liên quan