1

我有一个实现的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. 参考下图

在此处输入图像描述

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

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

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

4

1 回答 1

2

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

于 2016-02-10T10:08:34.077 回答