Можно ли написать характеристику без предварительного обнаружения сервисов? Я хочу реализовать приложение, которое подключается к периферийному устройству, записывает характеристику и отключается, затем подключается к другому устройству и т.д.... После отключения я gatt.close()
команду gatt.close()
для освобождения всех ресурсов. При первом подключении я создаю связь. Если я подожду обратного вызова onServicesDiscovered
и напишу характеристику:
BluetoothGattService mCustomService = mBluetoothGatt.getService(myUUID));
byte[] values = new byte[]{0x00, 0x01};
mWriteCharacteristic.setValue(values);
if(mBluetoothGatt.writeCharacteristic(mWriteCharacteristic) == false) {
Log.w(TAG, "Failed to write characteristic");
}
все отлично работает Но я хочу улучшить и ускорить весь процесс. Есть ли способ пропустить службы обнаружения и написать обычный символ после соединения с устройством связи?
BluetoothGattCharacteristic mCharacteristic = new BluetoothGattCharacteristic(UUID.fromString(GattAttributes.P1_MINI_POWER_CHARACTERISTIC), (BluetoothGattCharacteristic.PROPERTY_WRITE |BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE | BluetoothGattCharacteristic.PROPERTY_NOTIFY | BluetoothGattCharacteristic.PROPERTY_EXTENDED_PROPS), 0);
mCustomService.addCharacteristic(mCharacteristic);
byte[] values = new byte[]{0x00, 0x01};
mWriteCharacteristic.setValue(values);
if(mBluetoothGatt.writeCharacteristic(mWriteCharacteristic) == false) {
Log.w(TAG, "Failed to write characteristic");
}
Но без какого-либо успеха.
Нет, вы должны использовать DiscoverServices. Вы не можете написать определение самостоятельно. Одна из многих причин заключается в том, что стеку BLE необходимо знать дескриптор ATT значения характеристики, который не предоставляется с помощью BluetoothGattCharacteristic.