Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在运行时请求位置权限_Android_Location_Android 6.0 Marshmallow_Lint_Runtime Permissions - Fatal编程技术网

Android 正在运行时请求位置权限

Android 正在运行时请求位置权限,android,location,android-6.0-marshmallow,lint,runtime-permissions,Android,Location,Android 6.0 Marshmallow,Lint,Runtime Permissions,我有一个查询实现了位置的运行时权限。当我尝试requestLocationUpdates时,我得到LintError建议我为该行添加PermissionCheck。考虑到我实现了运行时权限。这就是它的样子 if (isNetworkEnabled() && networkListener != null) { if (ActivityCompat.checkSelfPermission(context, Manifest.permi

我有一个查询实现了
位置
运行时权限
。当我尝试
requestLocationUpdates
时,我得到
LintError
建议我为该行添加
PermissionCheck
。考虑到我实现了运行时权限。这就是它的样子

if (isNetworkEnabled() && networkListener != null) {
        if (ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(context,
                        Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(activity, new String[]
                    {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);

        } else
            mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkListener);
}
我的主类实现了
onRequestPermissionsResult
回调。这看起来像,

switch (requestCode) {
        case REQUEST_LOCATION:
                if (grantResults.length == 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                        && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
                        mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkListener);
                } else
                    Message.displayToast(context, "Without enabling permission, you can't access this feature");
            break;
    }
授予权限后,我再次请求位置更新。但它再次显示
LintError
,以添加
权限检查。请参阅下图

只需在请求
requestLocationUpdate
内部
onRequestPermissionsResult
之前尝试I
checkSelfPermission
,错误就消失了。就像下面的代码

if (ActivityCompat.checkSelfPermission(context, permissions[0]) == PackageManager.PERMISSION_GRANTED &&
                            ActivityCompat.checkSelfPermission(context, permissions[1]) == PackageManager.PERMISSION_GRANTED)

所以,我的问题是,如果用户授予了权限,我是否需要再次检查权限?如果我错了,请纠正我

您确实需要检查checkSelfPermission,因为使用最新的OS 6(棉花糖),您可以通过进入“设置”来撤销为应用程序授予的权限

因此,即使用户在安装期间已向应用程序授予了权限,在运行时,您也需要再次检查您的应用程序是否仍具有权限或用户是否已撤销了这些权限。

但为什么需要这样做?获得许可后,我请求更新!Lint知道,任何需要用户权限的调用都必须围绕权限检查语句,从而导致Lint错误。如果知道不会引发异常,则可以毫无问题地执行此程序。我会将权限检查和位置更新逻辑放在名为
checkAndCallLocationUpdates
的函数中,并从
onRequestPermissionResult
调用它,我甚至尝试使用一个公共函数。但是我有一些局部变量无法从
onRequestPermissionsResult
获取,所以我放弃了它。但这只是为了理解为什么会这样。如果是这种情况,我必须再次检查。谢谢你的快速回复。感激