web-dev-qa-db-fra.com

Android Activity_Recognition autorisation SDK 28 S'allume sur Android 10 / Q (SDK 29)

Mon Android APP cible SDK 28 et se connecte à Google Fit pour télécharger des données et lire d'autres données. L'application utilise l'Historyapi pour lire com.google.step_count.delta Data.

Cette documentation prétend que "com.google.android.gms.permission.activité_recognition est converti en une autorisation d'exécution pré-accordée" si l'application cible la SDK 28 mais fonctionne sur le SDK 29: https://developers.google .Com/Fit/Android/Autorisation # Android_Perrissions

J'ai ajouté au manifeste de l'application comme la documentation indique.

Lorsque cela Android app est sur un périphérique exécutant Android 10 (SDK 29) et que l'utilisateur se connecte à Google Fit pour la première fois, je reçois un journal :

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

Pourtant, la documentation prétend que cela sera converti en une autorisation d'exécution pré-accordée.

L'équipe n'est pas prête à migrer le SDK cible de l'application à 29 à ce jour, alors comment pouvons-nous continuer à obtenir com.google.step_count.delta Data sans cette erreur?

Je suppose que ce journal signifie qu'il n'a pas réellement connecté car il n'y avait pas d'énoncé de journal indiquant:

Successfully subscribed to com.google.step_count.delta
8
Karringgton

On dirait que la documentation a été mise à jour: https://developer.android.com/about/versions/10/privacy/changes#physiumical-activity-recognition

J'ai été capable de résoudre ce problème par uniquement à l'aide de l'autorisation API 28 dans le manifeste (com.google.android.gms.permission.activity_recognition).

Si l'application a été installée sur un périphérique exécutant Android 10 (API 29), le système apparaît à une attribution automatique correctement l'autorisation Android.permission.Activity_Recognition.

Étant donné que l'utilisateur peut modifier ceci dans Paramètres (Paramètres> Applications et notifications> Gestionnaire d'autorisations> Activité physique> Application spécifiée> Deny), j'ai pu vérifier l'autorisation Android.Permission.Activity_recognition Si l'application a été installée sur un périphérique exécutant Android 10 (API 29).

3
Karringgton

Je ne sais pas si cela aide à votre problème, mais cela nous aide à un problème similaire. Vérifiez d'abord si votre application/utilisateur a une activité physique autorisée - la plupart probablement pas. Si vous le permettez - votre code doit fonctionner sans exception.

Le problème pour nous était de savoir comment détecter que com.google.android.gms.permission.activity_recognition est autorisé (exécuté dans la cible SDK 28 sur Android 10) - depuis l'appel

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

retourne toujours vrai (même la permission est refusée)

solution de contournement (pour votre application d'application SDK 28 Running ON Android 1) est d'appeler la demande de demande (au lieu d'Ispermissiongranté) qui ne fait rien lorsque la permission est accordée et montrez la boîte de dialogue sinon

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

si vous exécutez un code de fond où l'activité n'est pas disponible, vous avez deux options:

  1. migrer vers la cible SDK 29 (et utiliser Android.Permission.Activity_recognition dans Manifest et chèques/Demande) - Nous l'avons testé et ça marche
  2. au début de l'activité principale ou à toute activité appropriée, exécutez l'appel ci-dessus qui demandera à l'utilisateur la permission
3
tritot