当我需要获取存储权限时,我只需一个方法,如下所示:
public boolean hasStoragePermission(Activity context, int requestCode){
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&&
ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, requestCode);
return false;
}
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&&
ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},requestCode);
return false;
}
return true;
}
现在我可以在需要时调用这个函数:
if(hasStoragePermission(context, requestCode){
//do the work
}
但如果是位置:
public boolean hasPermission(){
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
&&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
return true;
}
当我调用它时:
public void read(final LocationSetter locationSetter) {
if(!hasPermission()){return;}
flpClient = LocationServices.getFusedLocationProviderClient(this);
flpClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
locationSetter.processLocation(location);
}
});
}
它表示调用需要权限
。这是为什么?
最佳答案
Lint 检查很强大,但它们并不是魔法。此 Lint 规则正在寻找您拥有用于检查运行时权限的代码的证据,但它没有看到它。
如果用 if-positive-do-work 方法替换 if-negative-then-return 方法,你可能会有更好的运气:
if (hasPermission()) {
// TODO insert your fused location provider work here
}
或者,只是抑制此特定方法的 Lint 检查。 Android Studio 应该有一个快速修复方案。最后,Lint 规则可以帮助确保您做正确的事情,如果您确定自己做的是正确的事情,那么在这种情况下就不需要该 Lint 规则。
关于java - 运行时权限应该采用相同的方法。如何正确处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56977124/