AndroidデバイスからBLEとやり取りしてセンサー値を読み取ろうとしていますが、APIのレベルが21を超えています。デバイスをスキャンして接続しました。最初の課題は、すべての特性値を1つのショットで一緒に読み取ることでした。いくつかは優先順位キューを使用してそれを行うことを提案しました。私は賢明に実装しました。AndroidでBLEの値を継続的に読み取る
BluetoothGattCallback gattCallBack = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
switch (newState) {
case BluetoothProfile.STATE_CONNECTED:
Log.d(TAG, "STATE_CONNECTED");
bluetoothGatt.discoverServices();
break;
case BluetoothProfile.STATE_DISCONNECTED:
Log.d(TAG, "STATE_DISCONNECTED");
break;
default:
Log.d(TAG, "STATE_OTHER");
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
final List<BluetoothGattService> services = gatt.getServices();
characteristics = new ArrayList<BluetoothGattCharacteristic>();
characteristics.add(services.get(1).getCharacteristics().get(0));
characteristics.add(services.get(1).getCharacteristics().get(1));
characteristics.add(services.get(1).getCharacteristics().get(2));
characteristics.add(services.get(2).getCharacteristics().get(0));
characteristics.add(services.get(2).getCharacteristics().get(1));
characteristics.add(services.get(2).getCharacteristics().get(2));
characteristics.add(services.get(3).getCharacteristics().get(0));
characteristics.add(services.get(3).getCharacteristics().get(1));
characteristics.add(services.get(3).getCharacteristics().get(2));
requesReadCharacteristics(gatt);
}
public void requesReadCharacteristics(BluetoothGatt gatt) {
gatt.readCharacteristic(characteristics.get(characteristics.size() - 1));
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
if (status == 0) {
Log.d(TAG, "DeviceNameFetchFromDevice: " + characteristic.getValue());
characteristics.remove(characteristics.get(characteristics.size() - 1));
if (characteristics.size() > 0) {
requesReadCharacteristics(gatt);
} else {
gatt.disconnect();
}
}
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicWrite(gatt, characteristic, status);
}
};
は今は連続的に(10秒の間隔毎等)のセンサ値を読み取るためにBLEデバイスによって監視することが必要なので、私は繰り返し特性値を読み取り、それらの値を取得する必要があります。しかし、最初の呼び出しの後には、 "readCharacteristic"を呼び出すことはできません。
今のところ、BLEデバイスへの接続を切断して再度接続するような、一定間隔でconnectDevice(BluetoothDevice)を呼び出すように実装しました。 readCharacteristicを繰り返し呼び出してデバイスに接続できる方法はありますか?私の理解によれば、デバイスの取り外しと接続は効率的ではありません。その後、
mBluetoothLeService.setCharacteristicNotification(characteristic, true);
を、あなたがすることができます:私に知らせてください、何が、あなたが通知をオンにする必要があります。この
https://github.com/sandeeptengale/androidble/
「最初の呼び出し後にbleはreadCharacterisitcを呼び出すことができません」というエラーが何か、または何を意味していますか? – p2pkit