2014-01-23 95 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屬性有它們的值?例如對於PROPERTY_READ 0x02。在任何服務中,Read是我的第一個屬性。 – Krystian

+0

這些是服務地址,您在設備上運行的每項服務都有不同的地址。 –

0

我遇到了類似的問題,其中示例代碼只有在因操作符「|」而導致特徵爲READ時才起作用。如果特性屬於其他類型,如通知或寫入,則代碼將始終將其設置爲READ。正確的代碼應該如下所示:

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

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

(......與其他案件繼續)

同樣,谷歌的代碼示例是不正確的。

大衛

+0

你的意思是「charaProp&BluetoothGattCharacteristic.PROPERTY_NOTIFICATION」,對吧? – Emil