在android 4上问android权限?

时间:2017-09-18 13:48:24

标签: android

我有一个我发布的应用,它有类似的东西:

requestStoragePermission();

和功能:

private void requestStoragePermission(){
    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},STORAGE_PERMISSION_CODE);
}
@Override //user response
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if(requestCode == STORAGE_PERMISSION_CODE){
        //If permission is granted
        if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
            //Displaying a toast
            String string = getString(R.string.permissionOk);
            Toast.makeText(this,string,Toast.LENGTH_LONG).show();
        }
        else{
            //Displaying another toast if permission is not granted
            String string = getString(R.string.permissionError);
            Toast.makeText(this,string,Toast.LENGTH_LONG).show();
        }
    }
}

它在Android 6上运行正常...但是如何在android 4上进行解释,例如,它不需要权限?这是一种不好的做法吗?

3 个答案:

答案 0 :(得分:3)

在API级别上,用户不需要授予危险权限,请求该权限不会弹出用户的对话框,并自动授予权限。这仍然符合Google的安全政策,因为对于这些API级别,用户必须在安装过程中授予权限。

有些人会告诉您检查代码中的API级别,如果它低于23,则只请求权限。这只是代码已在内部执行的额外层,从而增加了代码的复杂性。你不必这样做。

答案 1 :(得分:1)

没有办法在android 4中请求persmission。

你只需要在android-manifest文件中添加权限,一切都将被处理。

但是,请确保在这些版本中未执行您的请求权限代码。为此使用类似:

 if(Build.VERSION.SDK_INT<23){
 //DoNOtRequestPersmissions
        }

答案 2 :(得分:0)

在我的项目中,为了请求权限,我通常有一个我称之为arePermissionsGranted()的函数。在该函数中,如果API级别低于23,则会自动显示“授予权限”,因为您不需要请求它们。如果API级别为23或更高,它会检查是否已授予权限,如果没有,则请求它们。