Я впервые спрашиваю, поэтому, пожалуйста, прости, если я покажу ошибки.
Проще говоря, я хочу создать приложение, способное взаимодействовать с Mi Band 3. Взаимодействие, которое я могу сделать просто читает информацию о батарее. Что я действительно хочу, так это включение в режиме реального времени частоты пульса и сканирования шагов.
Что я делал раньше?
Я видел и пробовал https://github.com/pangliang/miband-sdk-android. Именно эта библиотека заставила меня подумать, что можно включить сканирование сердца с Android. Я попытался выполнить с моим Mi Band 3, но не получилось: setHeartRateScanListener, startHeartRateScan, getBatteryInfo.
Я видел, клонировал и немного подделал с https://github.com/Freeyourgadget/Gadgetbridge , Это удивительно, он может взаимодействовать с моим Mi Band 3, но проблема в том, что у Gadgetbridge нет функции сканирования сердечного ритма, и я вроде как перегружен кодом.
Конечно, я мы пробовали https://developer.android.com/guide/topics/connectivity/bluetooth-le. После прочтения кода Pangliang и Gadgetbridge я сделал следующее, чтобы сделать сканирование сердечного ритма.
Во-первых, я знаю, что я должен поставить слушателя правильно? Итак, вот функция
public void listenHeartRate() {
BluetoothGattCharacteristic characteristic = bluetoothGatt.getService(UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb")).getCharacteristic(UUID.fromString("00002a37-0000-1000-8000-00805f9b34fb"));
bluetoothGatt.setCharacteristicNotification(characteristic, true);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
descriptor.setValue(new byte[] {0x01, 0x00});
if(!bluetoothGatt.writeDescriptor(descriptor)) {
Log.d(TAG, "tesListenHeartRate: failed");
}
}
И затем я начинаю сканирование следующим образом.
public void startHeartRate() {
Log.d(TAG, "tesHeartRate: start");
BluetoothGattCharacteristic characteristic = bluetoothGatt.getService(UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb")).getCharacteristic(UUID.fromString("00002a39-0000-1000-8000-00805f9b34fb"));
characteristic.setValue(new byte[]{21, 2, 1});
if (!bluetoothGatt.writeCharacteristic(characteristic)) {
Log.d(TAG, "tesStartHeartRate: failed");
}
}
Проблема в том, что writeCharacteristi c всегда возвращает статус 3, что означает GATT_WRITE_NOT_PERMITTED.
Итак, где я go ошибся? Большое спасибо.