に格納されている値を読み取ろうとしていますBluetoothGattCharacteristic
。以下は、BluetoothGattCallback
ほとんどのアクションが行われる私のコードです。
private final BluetoothGattCallback mGattCallback =
new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status,
int newState) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
Log.i(TAG, "Connected to GATT server.");
Log.i(TAG, "Getting services....");
gatt.discoverServices();
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
Log.i(TAG, "Disconnected from GATT server.");
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
BluetoothGattService serv = gatt.getService(Constants.MY_UUID);
if (serv != null) {
BluetoothGattCharacteristic characteristic = serv.getCharacteristic(Constants.ANOTHER_UUID);
boolean res = gatt.readCharacteristic(characteristic);
if (res) {
Log.d(TAG, "res was true");
} else {
Log.d(TAG, "res was false");
}
}
} else {
Log.w(TAG, "onServicesDiscovered received: " + status);
}
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
Log.d(TAG, "Succesfully read characteristic: " + characteristic.getValue().toString());
} else {
Log.d(TAG, "Characteristic read not successful");
}
}
};
したがって、特性から読み取るために、gatt.readCharacteristic()
特性を取り、操作が成功したかどうかを示すブール値を返すメソッドを使用しようとしています。ここでは、このメソッドが返さfalse
れ (「res was false」と出力)、失敗したことを示しています。
印刷されているエラー メッセージはありません。特性の正しい読み方は?このメソッドが返されるのはなぜfalse
ですか?
編集:
Inferno が提案したように、先に進み、必要なソースをダウンロードしてから、BluetoothGatt
readCharacteristic()
メソッドにブレークポイントを設定しました:
readCharacteristic()
android-23..\BluetoothGattのメソッドは次のとおりです。
public boolean readCharacteristic(BluetoothGattCharacteristic characteristic) {
if ((characteristic.getProperties() &
BluetoothGattCharacteristic.PROPERTY_READ) == 0) return false;
(characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_READ)
は 0 を返しfalse
ているため、すぐに返されます。現在、デバッガーによると、characteristic.getProperties()
の値が返されていますが8
、BluetoothGattCharacteristic.PROPERTY_READ
静的な int 値は0x02
です。
私が理解しているように、0x08 & 0x02
== 0.PROPERTY_READ
はハードコードされた値であるため、 から返される値に何か問題があると思いますcharacteristic.getProperties()
。ここで何がうまくいかないのでしょうか?