Начало фитнесаBleScan успешно, но сканирование остановлено с помощью MI Band 2 - PullRequest
8 голосов
/ 31 марта 2019

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

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();

И на подключен у меня:

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: ");
        }
    };

1 Ответ

2 голосов
/ 05 апреля 2019

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

...