2016-03-16 5 views
13

voici mon code et fonctionne parfaitement bien.Vérifiez les autorisations Android dans une méthode

if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
    mMap.setMyLocationEnabled(true); 
} 

Mais je n'aime pas un gros code sur chaque chèque, et que vous souhaitez déléguer à une méthode dans ma classe utilitaire.

if (Utils.hasMapLocationPermissions(getActivity())) { 
    mMap.setMyLocationEnabled(true); 
} 

Mais setMyLocationEnabled a annotation @RequiresPermission Et donc je ne peux pas déléguer à une méthode, car peluches et éditeur il montre comme une erreur .

Y a-t-il une annotation à écrire sur ma méthode utilitaire et supprimer les peluches?

Quelque chose comme ça

@ChecksPermission 
public boolean hasMapLocationPermissions(Activity activity) { 
    return // my checking logic.. 
} 
+0

Essayez de mettre '' setMyLocationEnabled' dans un try-catch' et la poignée 'SecurityException'. Devrait fonctionner sans annotation. – Rohit5k2

+0

Le code est encore grand et semble moche. Je veux résoudre avec un petit code soigné. –

Répondre

28

Vous pouvez renommer votre méthode comme checkLocationPermission(Activity activity). J'ai découvert que le nom de votre méthode doit commencer par "check" et se terminer par "Permission" pour passer les avertissements de Lint.

Par exemple:

public static boolean checkLocationPermission(Context context) { 
    return ActivityCompat.checkSelfPermission(context, 
      Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
      && ActivityCompat.checkSelfPermission(context, 
      Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED; 
} 
+2

Excellente réponse! Je savais qu'il y avait quelque chose comme ça. Merci. Maintenant, mon code est superbe et il n'y a pas d'avertissements de charpie. –

+0

Ha-ha, hacking de cette peluche est vraiment sympa –

1

Ce que je havre de paix fait est créer une classe et à l'intérieur faire un constructeur comme indiqué ci-dessous:

public MarshMallowPermission(Activity activity) { 
     this.activity = activity; 
    } 

    public boolean checkPermissionForRecord() { 
     int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO); 
     if (result == PackageManager.PERMISSION_GRANTED) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

Ensuite, à l'intérieur appelez-vous classe vos fonctions comme

if (!marshMallowPermission.checkPermissionForRecord()) { 
     marshMallowPermission.requestPermissionForRecord(); 
    } 

et avant d'appeler la fonction dans votre classe faites ceci

MarshMallowPermission marshMallowPermission = new MarshMallowPermission(getActivity()); 
+1

MarshMallowPermission n'est pas un nom très approprié, car nous avons aussi cette fonctionnalité dans les API supérieures. –

+0

MarshMallowPermission est un nom donné afin que vous puissiez comprendre ce que fait la classe. –

+0

@IoaneSharvadze: Si la réponse est en fonction de vos besoins, veuillez accepter et voter ma réponse. Merci –

12

Vous pouvez supprimer cette erreur dans les deux l'éditeur et dans les rapports de charpie en annotant votre méthode avec @SuppressWarnings("MissingPermission"), ou vous pouvez supprimer l'erreur pour une seule déclaration en mettant //noinspection MissingPermission au-dessus de cette ligne.

Par exemple:

@SuppressWarnings("MissingPermission") 
public boolean hasMapLocationPermissions(Activity activity) { 
    // your checking logic 
} 

Ou:

if (Utils.hasMapLocationPermissions(getActivity())) { 
    //noinspection MissingPermission 
    mMap.setMyLocationEnabled(true); 
} 
+0

Bonne réponse, j'attendrai plusieurs jours, et si c'est la meilleure réponse je vous donnerai la générosité. Merci. –