在运行时请求位置许可

时间:2016-02-10 09:41:57

标签: android location android-6.0-marshmallow lint runtime-permissions

我有一个针对RuntimePermission实施Location的查询。当我尝试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添加PermissionCheck。请参阅下图

enter image description here

checkSelfPermission内请求requestLocationUpdate之前尝试我onRequestPermissionsResult,错误消失了。如下面的代码。

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

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

1 个答案:

答案 0 :(得分:2)

您需要检查checkSelfPermission,因为使用最新的OS 6(Marshmallow),您可以通过进入设置来撤消为应用授予的权限。
因此,即使用户在安装期间已授予应用程序权限,运行时也需要仔细检查您的应用程序是否仍具有权限,或者用户是否已撤消这些权限。