我正在更新我的应用程序以使用新的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?
答案 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米) )设备的位置。
选择是你的。