我有一个针对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)
所以,我的问题是,如果用户授予了权限,我是否需要再次检查权限?如果我错了,请纠正我!
答案 0 :(得分:2)
您需要检查checkSelfPermission,因为使用最新的OS 6(Marshmallow),您可以通过进入设置来撤消为应用授予的权限。
因此,即使用户在安装期间已授予应用程序权限,运行时也需要仔细检查您的应用程序是否仍具有权限,或者用户是否已撤消这些权限。