Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is ACCESS_COARSE_LOCATION necessary if the user has already granted ACCESS_FINE_LOCATION?

I am updating my app to work with the new Android Marshmallow permission framework and it looks like it's enough for the user to grant the ACCESS_FINE_LOCATION permission at runtime for the app to work fine. This is what I do:

public static final String[] runtimePermissions = { permission.ACCESS_FINE_LOCATION };

public static final int LOCATION_PERMISSION_IDENTIFIER = 1;

and further down the class:

public static boolean checkConnectionPermission(final Context context) {

        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {

            if (context.checkSelfPermission(permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

                return true;
            }

            else {

                ((Activity) context).requestPermissions(runtimePermissions,
                        LOCATION_PERMISSION_IDENTIFIER);
                return false;
            }

        }

        // since in API levels below M the permission is granted on
        // installation,
        // it is considered a given that the permission has been granted since
        // the
        // app is running. So we return true by default

        else {
            return true;

        }

    }

I am just concerned that I am overlooking something that could cause trouble in the future (the app is near-production) with Security Exception(s).

I guess my ultimate question is: does granting FINE_LOCATION somehow auto-grant COARSE_LOCATION too?

like image 205
Antonis427 Avatar asked Oct 19 '22 03:10

Antonis427


2 Answers

Sort of already answered here.

If I have ACCESS_FINE_LOCATION already, can I omit ACCESS_COARSE_LOCATION?

Some additional information, you should look at permission group.

https://developer.android.com/preview/features/runtime-permissions.html

They are in the same permission group. If you really want to play safe, just include both in your manifest, and request them on need. It would be transparent to user.

like image 52
Derek Fung Avatar answered Oct 21 '22 17:10

Derek Fung


According to this blog post, if you have specified both in the manifest and the user has granted you one, then when you ask for the other it will be automatically granted (since they're both in the same permission group).

That means that if you have been granted COARSE_LOCATION and then ask for FINE_LOCATION you can get it without the user being prompted, but the catch is that you still have to specify both in the manifest.

like image 29
Ronnie Avatar answered Oct 21 '22 17:10

Ronnie