Google Fit SensorsClient OnDataPointListener не будет вызываться при получении TYPE_ACTIVITY_SEGMENT - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь получить текущее действие, которое пользователь выполняет с SensorsClient , используя эту документацию .

Во фрагменте я добавляю OnDataPointListener в SensorsClient, и я знаю, что он успешно добавлен, так как я вижу "Прослушиватель активности зарегистрирован!" сообщение в Logcat.

private fun requestActivityUpdates() {
        Fitness.getSensorsClient(context!!, GoogleSignIn.getLastSignedInAccount(context)!!)
            .add(SensorRequest.Builder()
                .setDataType(DataType.TYPE_ACTIVITY_SEGMENT)
                .setSamplingRate(10, TimeUnit.SECONDS)
                .build(), mActivityListener)
            .addOnSuccessListener {
                Log.i(TAG, "Activity Listener registered!")
            }
            .addOnFailureListener {
                Log.e(TAG, "Activity Listener not registered.", it)
            }
    }

Вот мой OnDataPointListener

private fun initActivityListener() {
        mActivityListener = OnDataPointListener {
            Log.i(TAG, "OnDataPoint Called!")
            for (field in it.dataType.fields) {
                val value: Value = it.getValue(field)
                Log.i(TAG, "Detected DataPoint field: " + field.name)
                Log.i(TAG, "Detected DataPoint value: ${value.asActivity()}")
            }
        }
    }

Этот слушатель не будет вызван ни разу. Я проверяю разрешения пользователей с помощью этого кода и могу получать количество шагов, калории и расстояние с помощью RecordingClient и HistroyClient с этими разрешениями, но по какой-то причине я не могу получить какие-либо данные об активности с SensorsClient

private fun initFitnessOptions() {
        fitnessOptions = FitnessOptions.builder()
            .addDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE, FitnessOptions.ACCESS_WRITE)
            .addDataType(DataType.TYPE_CALORIES_EXPENDED, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_DISTANCE_CUMULATIVE, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_WRITE)
            .build()

        val account = GoogleSignIn.getAccountForExtension(this, fitnessOptions)

        if (!GoogleSignIn.hasPermissions(account, fitnessOptions)) {
            GoogleSignIn.requestPermissions(
                this,
                GOOGLE_FIT_PERMISSIONS_REQUEST_CODE,
                account,
                fitnessOptions);
        } else {
            accessGoogleFit();
        }
    }

Разрешения на распознавание активности уже включены в мой AndroidManifest. xml

<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />

Как вы думаете, в чем здесь проблема?

...