android.permission.ACTIVITY_RECOGNITION не распознается при попытке запросить разрешение пользователя

Google Fit дает мне следующие исключения, когда я пытаюсь подписаться на TYPE_STEP_COUNT_CUMULATIVE (кумулятивные шаги) и TYPE_STEP_COUNT_DELTA с помощью RecordingClient (https://developers.google.com/android/reference/com/google/android/gms/fitness/RecordingClient)

failure: com.google.android.gms.common.api.ApiException: 10: SecurityException: com.google.step_count.cumulative requires android.permission.ACTIVITY_RECOGNITION

failure: com.google.android.gms.common.api.ApiException: 10: SecurityException: com.google.step_count.delta requires android.permission.ACTIVITY_RECOGNITION

Это происходит только для уровня API 29 и выше.

Я попытался включить <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/> и <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" /> в манифест в соответствии с рекомендациями Android ACTIVITY_RECOGNITION Разрешение SDK 28 работает на Android 10/Q (SDK 29), но я не могу запросить разрешение у основного действия.

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACTIVITY_RECOGNITION), REQUEST_CODE) // error occurs here
}

ACTIVITY_RECOGNITION не распознается, и я не получаю его в качестве предложения при наборе текста.


person Anirudh Ganesh    schedule 08.07.2020    source источник
comment
Проверяете ли вы разрешение ACTIVITY_RECOGNITION во время выполнения?   -  person EraftYps    schedule 08.07.2020
comment
Я исправил это, изменив targetSdkVersion на 28 с 29. Хотя я думаю, что для 29, как указано в документах, мне нужно получить разрешение во время выполнения, а для 28 в манифесте упоминается ‹uses-permission android:name=android.permission. ACTIVITY_RECOGNITION/› должен предоставить разрешение автоматически (developers.google.com /fit/android/), хотя, если пользователь отзовет разрешение, это необходимо обработать. Обновлю, как только попробую.   -  person Anirudh Ganesh    schedule 08.07.2020
comment
@EraftYps Я пробовал, но он даже не распознается.   -  person Anirudh Ganesh    schedule 20.07.2020


Ответы (1)


Я ориентировался на API 28 в Gradle. Только после изменения целевого API29 разрешение стало распознаваться IDE. Google ввел разрешение ACTIVITY_RECOGNITION для API 29 и выше, поскольку это считается опасным разрешением. Для API 28 и ниже разрешение предоставляется автоматически во время выполнения, но если пользователь удаляет разрешение, оно также должно быть обработано. Подробнее об этом можно узнать здесь и здесь

person Anirudh Ganesh    schedule 23.07.2020