【问题标题】:Is ACCESS_COARSE_LOCATION necessary if the user has already granted ACCESS_FINE_LOCATION?如果用户已经授予 ACCESS_FINE_LOCATION,是否需要 ACCESS_COARSE_LOCATION?
【发布时间】:2015-11-25 03:41:06
【问题描述】:

我正在更新我的应用以使用新的 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;

        }

    }

我只是担心我忽略了一些可能在未来引起麻烦的事情(该应用程序即将投入生产)并出现安全异常。

我想我的终极问题是:授予 FINE_LOCATION 是否也会自动授予 COARSE_LOCATION?

【问题讨论】:

    标签: android location android-permissions


    【解决方案1】:

    这里已经回答过了。

    If I have ACCESS_FINE_LOCATION already, can I omit ACCESS_COARSE_LOCATION?

    一些额外的信息,你应该看看权限组。

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

    他们在同一个权限组中。如果您真的想安全起见,只需将两者都包含在您的清单中,并在需要时请求它们。它对用户是透明的。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        应用实际上可以注册两种类型的位置更新。细粒度,它使用全球定位系统将设备的位置精确到几米之内,而粗粒度,它使用设备可用的 Wifi、手机信号塔和其他数据来粗略(精确到 10 米) ) 设备的位置。

        选择是你的。

        【讨论】:

          猜你喜欢
          • 2011-09-21
          • 2018-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-13
          相关资源
          最近更新 更多