Не уверен, поможет ли это в вашей проблеме, но помогает нам в аналогичной проблеме.Сначала проверьте, разрешено ли вашему приложению / пользователю физическая активность - скорее всего, нет.Если вы разрешите это - ваш код должен работать без исключений.
Для нас проблема заключалась в том, как определить, разрешено ли 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)
}
, если вы используете фоновый код, где активность недоступна, у вас есть два варианта:
- перейти на целевой SDK 29 (и использовать android.permission.ACTIVITY_RECOGNITION в манифесте и проверках / запросах) - мы проверили его, и он работает
- в начале основного действия или любого подходящего действия, выполнив вызов вышекоторый попросит у пользователя разрешения