web-dev-qa-db-fra.com

Android Studio - Avertissement de suppression d'une exception de sécurité

Je reçois l'emplacement de l'utilisateur par 

Location location = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);

Cette ligne de code est à l'intérieur d'une méthode et avant d'appeler cette méthode, je vérifie les autorisations d'exécution Android. Seulement si l'autorisation est disponible de l'utilisateur, j'appelle cette méthode. Le code fonctionne parfaitement.

Le problème est qu'Android Studio affiche toujours une erreur sur cette ligne et ne reconnaît pas que j'ai déjà vérifié avant d'appeler cette fonction.

Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`

Maintenant, comment puis-je supprimer cet avertissement? J'ai déjà vérifié les autorisations et je ne veux pas vérifier à nouveau simplement pour supprimer cet avertissement. J'ai essayé d'ajouter @SuppressWarnings () mais je ne connais pas la chaîne exacte à passer. @SuppressWarnings ({"all"}) fonctionne mais ce n'est évidemment pas recommandé.

Comment puis-je supprimer cet avertissement? 

EDIT 1: Ceci est mon code exact -

private void checkPermissions() {
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED)
        getLocation();  //Method called if I have permission
}

private void getLocation() {
    //Android studio shows warning at this line.
    Location location = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
}

Mais si je mets la vérification des autorisations dans la méthode getLocation (), l'avertissement disparaît. @SuppressWarnings ({"MissingPermission"}) n'a pas fonctionné.

EDIT 2: J'ai découvert que le seul moyen de supprimer l'avertissement est - 

Ajout de ce commentaire au-dessus de ce morceau de code particulier - 

//noinspection ResourceType

ou en ajoutant ceci - 

@SuppressWarnings({"ResourceType"})
49
Jyotman Singh

Vous recherchez (mis à jour pour améliorer la clarté):

@Override
@SuppressWarnings({"MissingPermission"})
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (LOCATION_REQUEST_CODE == requestCode) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);


       }
}

Édité:

La règle de la charpie correcte est MissingPermission , mais il semble y avoir un bogue qui l’a égaré.

Donc, veuillez essayer aussi @SuppressWarnings ({"ResourceType"}).

118
Renascienza

Si vous souhaitez ignorer cet avertissement, vous pouvez le faire en ligne:

//noinspection MissingPermission
Location lastLocation = FusedLocationApi.getLastLocation(locationClient);

ou au niveau de la méthode:

@SuppressWarnings({"MissingPermission"})
public void toggleGPS(boolean enableGPS) {
  ...
}
5
Tobrun

vous pouvez utiliser Android Studio Inspection pour générer @SuppressWarnings({"MissingPermission"}) pour votre méthode ou votre classe

 Android studio missing permission check

0
Ahmad Ronagh