首页 > 解决方案 > 在 Android 11 api30 上访问 Android/data/“SOME APP FOLDER”

问题描述

如何在 Android R (11) 中访问 /Android/data/"Target app"?

private boolean isPermissionGranted(){
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R){
        // for Android 11
        return Environment.isExternalStorageManager();

    }else {
        int readExternalStoragePermission = ContextCompat.checkSelfPermission(this , Manifest.permission.READ_EXTERNAL_STORAGE);
        return readExternalStoragePermission == PackageManager.PERMISSION_GRANTED;

    }
}
public void takePermission(View view){
    if (isPermissionGranted()){
        Toast.makeText(getBaseContext(), "Permission is Already Granted!", Toast.LENGTH_SHORT).show();
    }else {
        takePermission();
    }
}

private void takePermission(){
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R){
        try {
            Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
            intent.addCategory("android.intent.category.DEFAULT");
            intent.setData(Uri.parse(String.format("package:%s" , getApplicationContext().getPackageName())));
            startActivityForResult(intent , 100);
        }catch (Exception exception){
            Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
            intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
            startActivityForResult(intent , 100);
        }
    }else {
        ActivityCompat.requestPermissions(this , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},101);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 100){
        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R){
            if (Environment.isExternalStorageManager()){
                Toast.makeText(getBaseContext(), "Permission Granted in Android 11 ", Toast.LENGTH_SHORT).show();
            }else {
                takePermission();
            }
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (grantResults.length > 0){

        if (requestCode == 101){
            boolean readExternalStorage = grantResults[0] == PackageManager.PERMISSION_GRANTED;
            if (readExternalStorage){
                Toast.makeText(getBaseContext(), "Read Permission is Granted in Android 10 or below", Toast.LENGTH_SHORT).show();
            }else {
                takePermission();
            }
        }

    }
}

这正在努力写到每一个地方。但是当我想在 /storage/emulated/0/Android/data/"Some App Folder" 中写入时,我收到了这个错误:2021-08-27 17:46:09.803 23862-23862/com.itscaptive.frpsrcchanger E/Permission_LOG :java.io.FileNotFoundException:/storage/emulated/0/Android/data/com.tencent.ig/SrcVersion.ini:打开失败:EACCES(权限被拒绝)

任何人都可以帮助我吗?:)

标签: android

解决方案


Android 11 你不再可以访问其他应用程序的数据文件夹

https://developer.android.com/about/versions/11/privacy/storage#other-apps-data


推荐阅读