2014-01-23 4 views

ответ

12
/** 
    * @return Returns <b>true</b> if property is writable 
    */ 
    public static boolean isCharacteristicWriteable(BluetoothGattCharacteristic pChar) { 
     return (pChar.getProperties() & (BluetoothGattCharacteristic.PROPERTY_WRITE | BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE)) != 0; 
    } 

    /** 
    * @return Returns <b>true</b> if property is Readable 
    */ 
    public static boolean isCharacterisitcReadable(BluetoothGattCharacteristic pChar) { 
     return ((pChar.getProperties() & BluetoothGattCharacteristic.PROPERTY_READ) != 0); 
    } 

    /** 
    * @return Returns <b>true</b> if property is supports notification 
    */ 
    public boolean isCharacterisiticNotifiable(BluetoothGattCharacteristic pChar) { 
     return (pChar.getProperties() & BluetoothGattCharacteristic.PROPERTY_NOTIFY) != 0; 
    } 
+0

Я действительно не знаю, почему, но в Android официального образца "если ((charaProp | BluetoothGattCharacteristic.PROPERTY_READ)> 0)" Использование '&', на мой взгляд, правильно, но '| «работает для меня. В любом случае, не могли бы вы объяснить, почему у этих свойств BluetoothGattCharacteristic есть значения, которые у них есть? Например, 0x02 для PROPERTY_READ. В любом сервисе Read - это мое первое свойство. – Krystian

+0

Это служебный адрес, у вас есть другой адрес для каждой службы, запущенной на устройстве. –

0

Я столкнулся с аналогичной проблемой, когда образец кода ТОЛЬКО работает, когда характеристика READ из-за оператора «|». Если символ имеет другие типы, такие как «Уведомление» или «Запись», код всегда будет устанавливать его как «ЧИТАТЬ». Правильный код должен быть следующим:

if((charaProp & BluetoothGattCharacteristic.PROPERTY_READ) > 0){ 

} else if(charaProp | BluetoothGattCharacteristic.PROPERTY_NOTIFICATION) > 0){ 
} 

(... Продолжить с другими случаями)

Опять же, пример кода Google не является правильным.

Дэвид

+0

Вы имеете в виду «charaProp & BluetoothGattCharacteristic.PROPERTY_NOTIFICATION», правильно? – Emil