1
votes

Existe-t-il une différence entre les autorisations ACCESS_FINE_LOCATION et ACCESS_COARSE_LOCATION entre SDK 22 et 25?

J'essaie d'obtenir la position actuelle du GPS ou du fournisseur de réseau pour lequel j'utilise ces autorisations en la déclarant dans AndroidManifest.xml,

ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED

Je valide l'autorisation au moment de l'exécution comme,

ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)

et

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

Cela fonctionne bien pour moi avec Android SDK version 22 alors que dans SDK version 25 bien que l'autorisation soit déclarée dans AndroidManifest.xml, elle n'est pas reflétée lors de l'exécution.

J'ai vérifié si ces autorisations sont accordées ou non par,

paquet adb shell dumpsys com.abc.xyz

Les autorisations n'ont pas été accordées pour mon application qui s'exécute sur le SDK-25 lorsque j'ai essayé d'accorder l'autorisation avec le shell adb comme,

adb shell pm grant com.abc.xyz android.Manifest.permission.ACCESS_COARSE_LOCATION

Je soupçonne qu'Android a accordé ces autorisations à partir de la version 25 du SDK (veuillez me corriger si je me trompe). Avec une simple recherche sur Google, je ne suis pas en mesure de comprendre comment le niveau d'autorisation / la gravité a changé entre les versions du SDK.

S'il vous plaît, aidez-moi à le savoir.


2 commentaires

ACCESS_FINE_LOCATION couvre les deux. Lorsque vous avez ACCESS_FINE_LOCATION , vous n'avez pas besoin de ACCESS_COARSE_LOCATION . \


Lisez developer.android.com/guide/topics/location/… pour clarifier.


4 Réponses :


1
votes

Essayez celle-ci.

 private boolean RequestPermissions() {

    int camera = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA);
    int storage = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
    List<String> listPermissionsNeeded = new ArrayList<>();
    if (camera != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(CAMERA);
    }
    if (storage != PackageManager.PERMISSION_GRANTED) {
        listPermissionsNeeded.add(WRITE_EXTERNAL_STORAGE);
        listPermissionsNeeded.add(READ_EXTERNAL_STORAGE);

    }
    if (!listPermissionsNeeded.isEmpty()) {
        ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray
                (new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
        return false;
    }

    return true;
}

c'est la fonction qui vérifie si l'autorisation est nécessaire et si elles ne sont pas disponibles, elle demandera à l'utilisateur.


3 commentaires

Est-ce vraiment nécessaire pour le demander à l'utilisateur? Comment puis-je vérifier si Android impose de telles restrictions avec les versions du SDK?


Où puis-je vérifier ces informations? Je ne parviens pas à le trouver avec la documentation du développeur Android.


faites-le dans le fichier manifeste et écrivez le code à l'envers dans le fichier java aller.




1
votes

Une autre chose que vous devez garder à l'esprit: ACCESS_FINE_LOCATION vous donne une localisation meilleure et plus précise et ACCESS_COARSE_LOCATION vous donne une localisation moins précise.


0 commentaires

0
votes

ACCESS_FINE_LOCATION inclut ACCESS_COARSE_LOCATION. Cependant, il y a un hic:

ACCESS_COARSE_LOCATION vous donne le dernier emplacement connu qui est compatible avec la batterie https: //developer.android.com/training/location/retrieve-current.html#setup

Cependant, si vous avez besoin de quelque chose comme une localisation en direct / en temps réel comme Pokemon Go, utilisez ACCESS_FINE_LOCATION Il vous donne une localisation en direct / en temps réel.


0 commentaires