Фитнес-стартBleScan выполнен успешно, но сканирование остановлено с помощью MI Band 2

Я хочу запросить данные датчика с моего mi band 2, используя приложение для Android в режиме реального времени. У меня есть некоторые трудности с этим. Я использую разрешения BLUETOOTH и BLUETOOTH_ADMIN. Я проверил, вижу ли я свое устройство через API Bluetooth по умолчанию. Я пытаюсь использовать этот пример https://developers.google.com/fit/android/ble-sensors?hl=ru и все время получаю onScanStopped и этот callback не имеет никакого объяснения, поэтому я не понимаю, почему он не работает. Мой код:

GoogleApiClient client = new GoogleApiClient.Builder(this)
                    .addApi(Fitness.SENSORS_API)
                    .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
                    .addScope(new Scope(Scopes.FITNESS_BODY_READ))
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .build();
            client.connect();

И onConnected у меня есть:

Fitness.getBleClient(this, GoogleSignIn.getLastSignedInAccount(this))
.startBleScan(Arrays.asList(DataType.TYPE_ACTIVITY_SEGMENT), 60, bleScanCallbacks)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                Log.d("TAG_F", "onComplete: " + task.isSuccessful());
            }
        });

Вот я тоже попробовал все эти типы данных DataType.TYPE_STEP_COUNT_DELTA, DataType.TYPE_HEART_RATE_BPM

Это показывает мне, что мое сканирование прошло успешно. Но при обратном вызове через 60 секунд я получаю onScanStopped :

private BleScanCallback bleScanCallbacks = new BleScanCallback() {
        @Override
        public void onDeviceFound(BleDevice bleDevice) {
            Log.d("TAG_F", "onDeviceFound: " + bleDevice.getDataTypes());

        }

        @Override
        public void onScanStopped() {
            Log.d("TAG_F", "onScanStopped: ");
        }
    };

person Vadim Eksler    schedule 31.03.2019    source источник
comment
вы получаете сообщение о том, что сканирование остановлено, время ожидания bcz истекло, onScanStopped() Called when the scan is stopped (normally because the timeout expired). попробуйте увеличить время ожидания в секундах   -  person Ashvin solanki    schedule 05.04.2019
comment
Чтобы использовать BluetoothLeScanner, вы должны запросить разрешение пользователя, объявив разрешение ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION в файле манифеста вашего приложения. Без этих разрешений сканирование не даст никаких результатов. Также вам нужно добавить это в манифест вашего приложения: «uses-feature android:name=android.hardware.bluetooth_le android:required=true/false/›»   -  person Hadas    schedule 10.04.2019
comment
@Hadas да, это там, в манифесте   -  person Vadim Eksler    schedule 11.04.2019
comment
Вызывается onDeviceFound? (находит ли ваше приложение другие устройства, кроме вашего mi band 2?)   -  person Hadas    schedule 11.04.2019
comment
Еще одна мысль - Многие устройства ble могут иметь только одно подключение. Таким образом, сканирование mi band 2 может упасть, потому что оно уже подключено к другому приложению/устройству.   -  person Hadas    schedule 11.04.2019
comment
@Hadas нет, onDeviceFound не вызывается. Про другие устройства не знаю. Об одном соединении также известно.   -  person Vadim Eksler    schedule 14.04.2019
comment
Это очень странно. На вашем месте я бы попробовал использовать этот документальный фильм: Developers.google.com/android/reference/com/google/android/gms/ И если это не сработает, я бы попытался установить простое ble-соединение с помощью этого документального фильма: developer.android.com/guide/topics/connectivity/bluetooth-le   -  person Hadas    schedule 14.04.2019
comment
@Hadas, да, странно ... другие запросы на фитнес возвращают результаты и работают так, как я ожидаю, еще одна вещь, которую я вижу в своем устройстве через руководство по второй ссылке, но это соединение не предоставляет такие данные, как фитнес.   -  person Vadim Eksler    schedule 14.04.2019


Ответы (1)


onScanStopped() вызывается, когда время ожидания, указанное в

startBleScan(List<DataType> dataTypes, int timeoutSecs, BleScanCallback callback)

истекший.

Попробуйте увеличить/уменьшить время (60 минут), указанное в вашем методе:

 Fitness.getBleClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .startBleScan(Arrays.asList(DataType.TYPE_ACTIVITY_SEGMENT), 60, bleScanCallbacks)

Документация по Android

person Andrea Scalabrini    schedule 05.04.2019
comment
тот же результат, даже если вы попытаетесь сократить время? В любом случае, это странно. В официальной документации время ожидания установлено на 1000. developers.google.com /fit/android/ble-sensors?hl=ru - person Andrea Scalabrini; 08.04.2019
comment
Вот почему я задаю этот вопрос, я пару раз читал документы, а также пытался проверить, вижу ли я датчик ble через bluetooth api, и я не вижу причины, по которой фитнес не создает соединение... - person Vadim Eksler; 08.04.2019