Myroslav
Myroslav

Reputation: 1237

Android ACTIVITY_RECOGNITION on targetAPI = 29 and device's Android ver. < 10

My question is similar to Android 10 request permission for ACTIVITY_RECOGNITION in a way that I also do not have a permission dialog showing on a device, but conditions are different.

My app is targeting API 29.

In manifest I have

<uses-permission android:name="android.permission.BODY_SENSORS"/> <- for test purposes

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

Requesting permission Manifest.permission.ACTIVITY_RECOGNITION as usual:

fragment.requestPermissions(permissions, GOOGLE_FIT_ANDROID_PERMISSIONS_REQUEST_CODE)

On a device with Android 9 (API28) I do not receive a permission dialog for ACTIVITY_RECOGNITION and when I check a permission status, it is always denied.

I know that permission logic is working, as when I've added BODY_SENSORS permission, I do get a permission dialog for BODY_SENSORS, but not for ACTIVITY_RECOGNITION. As a result, a permission for BODY_SENSORS is granted, but for ACTIVITY_RECOGNITION - not:

permissions array:

android.permission.BODY_SENSORS;android.permission.ACTIVITY_RECOGNITION

grantResults array:

0;-1

Upvotes: 2

Views: 1515

Answers (2)

The permission ACTIVITY_RECOGNITION has been introduced in Android 10. See Android Documentation. It will be ignored on devices running Android 9 or lower since this specific permission does not exist on those versions. If the system will not show an error; it might treat it as a custom permission.

Upvotes: 0

Myroslav
Myroslav

Reputation: 1237

Answering my own question. Please don't treat it as a source of truth, it is based on my own tests. Maybe someone from GoogleFit team can comment on this.

Preconditions: your app is targeting API29 or above.

Regardless of Android version, installed on a device, you should add permissions to Manifest file according to documentation. Side note: I was able to query GoogleFit HistoryApi even without those permissions on device with Android 9, but Android 10 will not work.

<uses-permission android:name="android.permission.BODY_SENSORS"/>
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

For devices with Android 10 or above: all is simple, you should request runtime permissions, same which you've added to Manifest.

For devices with Android version 9 or below: you don't have to request runtime permissions. This is the part which was not clear from the documentation. You may, of course, request those permissions, but for android.permission. ACTIVITY_RECOGNITION you will not receive a permission dialog and as a result permission will not be granted.

Upvotes: 2

Related Questions