Android ACTIVITY_RECOGNITION Permission SDK 28 работает на Android 10 / Q (SDK 29) - PullRequest
2 голосов
/ 19 сентября 2019

Мое приложение для Android предназначено для SDK 28 и подключается к Google Fit для загрузки данных и считывания некоторых других данных.Приложение использует HistoryAPI для чтения данных com.google.step_count.delta.

В этой документации утверждается, что «com.google.android.gms.permission.ACTIVITY_RECOGNITION преобразуется в предварительно предоставленное разрешение времени выполнения», еслиприложение предназначено для SDK 28, но работает на SDK 29: https://developers.google.com/fit/android/authorization#android_permissions

Я добавил к манифесту приложения, как указано в документации.

Когда это приложение Android на устройстве под управлением Android10 (SDK 29), и пользователь впервые подключается к Google Fit, я получаю журнал, в котором говорится:

There was a problem subscribing.com.google.android.gms.common.api.ApiException: 10: SecurityException: com.google.step_count.delta requires android.permission.ACTIVITY_RECOGNITION

Тем не менее, в документации утверждается, что это будет преобразовано в предварительно предоставленное разрешение времени выполнения.

Команда еще не готова перенести целевой SDK приложения на 29, поэтому как мы можем продолжать получать данные com.google.step_count.delta без этой ошибки?

Я предполагаю, чтоэтот журнал означает, что он фактически не соединялся, поскольку не было никакого оператора журнала, который сказал бы:

Successfully subscribed to com.google.step_count.delta

1 Ответ

0 голосов
/ 27 сентября 2019

Не уверен, поможет ли это в вашей проблеме, но помогает нам в аналогичной проблеме.Сначала проверьте, разрешено ли вашему приложению / пользователю физическая активность - скорее всего, нет.Если вы разрешите это - ваш код должен работать без исключений.

Для нас проблема заключалась в том, как определить, разрешено ли com.google.android.gms.permission.ACTIVITY_RECOGNITION (работает в целевой SDK 28 на Android 10) -так как call

PermissionCompat.isPermissionGranted(context,"com.google.android.gms.permission.ACTIVITY_RECOGNITION")

всегда возвращает true (даже в разрешении отказано)

обходной путь ( для цели приложения sdk 28, выполняющейся на Android 10 ), заключается в вызове requestPermission (вместо isPermissionGranted), который ничего не делает при предоставлении разрешения и показывает диалоговое окно, если нет

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        PermissionCompat.requestPermission(activity, "com.google.android.gms.permission.ACTIVITY_RECOGNITION", requestCode)
}

, если вы используете фоновый код, где активность недоступна, у вас есть два варианта:

  1. перейти на целевой SDK 29 (и использовать android.permission.ACTIVITY_RECOGNITION в манифесте и проверках / запросах) - мы проверили его, и он работает
  2. в начале основного действия или любого подходящего действия, выполнив вызов вышекоторый попросит у пользователя разрешения
...