Check Android Permissions in a Method
Asked Answered
G

2

30

here is my code and it works perfectly fine.

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);
}

But I don't like such a big code on every check, and want to delegate it to a method in my utility class.

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

But setMyLocationEnabled has annotation @RequiresPermission And thus I can't delegate it to a method, because lint and editor shows it as an error.

Is there some annotation to write on my utility method and suppress lint?

Something like this

@ChecksPermission
public boolean hasMapLocationPermissions(Activity activity) {
  return // my checking logic..
}
Garrettgarrick answered 16/3, 2016 at 9:15 Comment(2)
Try putting setMyLocationEnabled in a try-catch and handle SecurityException. Should work without annotation.Jestude
The code is still big and looks ugly. I want to solve with neat small code.Garrettgarrick
L
75

You can rename your method such as checkLocationPermission(Activity activity). I´ve discovered that your method's name must start with "check" and end with "Permission" to pass Lint warnings.

For example:

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;
}
Lexington answered 24/3, 2016 at 4:29 Comment(1)
For me only the checkPermission() method name works.Chocolate
O
17

You can suppress this error in both the editor and in lint reports by annotating your method with @SuppressWarnings("MissingPermission"), or you can suppress the error for just a single statement by putting //noinspection MissingPermission above that line.

For example:

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

Or:

if (Utils.hasMapLocationPermissions(getActivity())) {
    //noinspection MissingPermission
    mMap.setMyLocationEnabled(true);
}
Olympium answered 18/3, 2016 at 15:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.