如果用户已经授予ACCESS_FINE_LOCATION,是否需要ACCESS_COARSE_LOCATION?

时间:2015-08-31 07:01:49

标签: android location android-permissions

我正在更新我的应用程序以使用新的Android Marshmallow权限框架,看起来它足以让用户在运行时授予ACCESS_FINE_LOCATION权限,以使应用程序正常工作。这就是我的工作:

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

public static final int LOCATION_PERMISSION_IDENTIFIER = 1;

进一步下课:

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;

        }

    }

我只是担心我会忽略一些可能导致未来出现问题的应用程序(该应用程序已接近生产),其中包含Security Exception(s)。

我想我的最终问题是:是否授予FINE_LOCATION以某种方式自动授予COARSE_LOCATION?

3 个答案:

答案 0 :(得分:2)

这里已经回答过了。

If I have ACCESS_FINE_LOCATION already, can I omit ACCESS_COARSE_LOCATION?

一些其他信息,您应该查看权限组。

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

他们属于同一权限组。如果你真的想玩安全,只需在你的清单中包含两者,并在需要时请求它们。这对用户来说是透明的。

答案 1 :(得分:1)

根据this blog post,如果您在清单中指定了两者并且用户已授予您一个,那么当您要求另一个时,它将被自动授予(因为它们都在同一权限组中) )。

这意味着,如果您已被授予COARSE_LOCATION,然后要求FINE_LOCATION,您可以在不提示用户的情况下获取它,但问题是您仍需要在清单中指定两者。

答案 2 :(得分:0)

应用实际上可以注册两种类型的位置更新。细粒度,使用全球定位系统将设备的位置精确到几米之内,与粗粒度相比,它使用Wifi,Cell塔和设备可用的其他数据来获得粗糙(精确到10米) )设备的位置。

选择是你的。