5

Tôi có một ứng dụng Android (Glass) hoạt động như một BLE trung tâm và kết nối với một BLE ngoại vi (mà là một thiết bị iOS sử dụng Core Bluetooth). Tôi đang cố đọc từ ghi vào thiết bị ngoại vi.BLE Android: không thể viết một đặc trưng (không PROPERTY_WRITE)

Hoạt động đọc tốt (và nhận thông báo cũng hoạt động tốt).

Tuy nhiên tôi không quản lý để viết một đặc tính. Dưới đây là mã của tôi:

@Override 
public void onServicesDiscovered(BluetoothGatt gatt, int status) { 
    if (status == BluetoothGatt.GATT_SUCCESS) { 
    BluetoothGattService bse = gatt.getService(TRANSFER_SERVICE_UUID); 
    BluetoothGattCharacteristic bgc = bse.getCharacteristic(TRANSFER_CHARACTERISTIC_UUID); 
    bgc.setValue("Hello"); 
    boolean writeOk = gatt.writeCharacteristic(bgc); 
    } 
} 

@Override 
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { 
    // never called 
} 

writeOk luôn là false. Tôi đã sửa lỗi và phát hiện ra rằng lý do là các thuộc tính. bgc.getProperties() luôn trả về 50, bất kể thuộc tính nào được đặt ở phía iOS. 50PROPERTY_READ, PROPERTY_NOTIFYPROPERTY_INDICATE, nhưng nó thiếu PROPERTY_WRITE, vì vậy BluetoothGatt.writeCharacteristic() ngay lập tức thoát:

public boolean writeCharacteristic(BluetoothGattCharacteristic characteristic) { 
    if ((characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_WRITE) == 0 
     && (characteristic.getProperties() & 
      BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) == 0) return false; 
... 
} 

Dường như với tôi rằng các thuộc tính không được truyền một cách chính xác từ iOS ngoại vi cho Android trung ương. Khi kết nối với thiết bị ngoại vi iOS với trung tâm iOS, các thuộc tính được truyền chính xác và viết các tác phẩm.

Tôi đã thử:

Vì vậy, - tôi làm điều gì sai trái về phía Android? Nếu không: Đây có phải là lỗi không? Hay iOS chỉ muốn nhận bài viết từ thiết bị iOS?

Tôi đang sử dụng Android 4.4.2 (Glass XE18.11).

+0

bạn có thể gợi ý cho tôi cách bạn đọc Đặc trưng từ ios cho android không? – Rajesh

Trả lời

2

Có vẻ rằng đây là một lỗi trong các API Android BLE. Sau khi cập nhật mới nhất (Glass XE18.3) hành vi này đã biến mất và truyền các thuộc tính hoạt động như mong đợi.

+0

Tôi đang sử dụng Sony, các thiết bị Motorola phiên bản 5 và 4.4.4. Nhưng không viết lỗi là Viết các đặc điểm thất bại. – Prasad

1

Bạn có lẽ có thể tìm thấy câu trả lời tại liên kết này:

https://devzone.nordicsemi.com/question/1423/writing-to-a-characteristic-using-the-android-43-api/

Trân

+1

Theo như tôi có thể thấy vấn đề trong câu hỏi này là không có quyền ghi được đưa ra ở phía _peripheral_. Trong trường hợp của tôi, _peripheral_ cấp cho tôi quyền ghi, nhưng chúng không hiển thị trong API Android ở phía _central_. –

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