java将图像文件写入SD卡时出现“权限被拒绝”错误

hc2pp10m  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(328)

我使用了一个演示项目来获取图像并将其保存到SD卡中,效果很好。但是在用相同的代码创建一个新项目之后,它不断给出“permission denied”错误和io exception。
xml和gradle文件是从demo项目复制的,只删除几个活动,权限在xml文件中声明

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

也在代码中动态请求

public class PermissionManager {
    private static final int REQUEST_CODE_ASK_PERMISSIONS = 1;
    private static final String[] PERMISSIONS_ARRAYS = new String[] {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};
    private static List<String> permissionsList = new ArrayList<>();
    private PermissionManager() {
    }
    public static void onResume(final Activity activity) {
        boolean isHasPermission = true;
        for (String permission : PERMISSIONS_ARRAYS) {
            if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
                isHasPermission = false;
                break;
            }
        }
        if (!isHasPermission) {
            for (String permission : PERMISSIONS_ARRAYS) {
                if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
                    permissionsList.add(permission);
                }
            }
            ActivityCompat.requestPermissions(activity,
                    permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_PERMISSIONS);
        }
    }

我发现关于这个问题有几个问题,但是如上所示,权限请求和语句都设置好了,并且在旧项目中工作得很好,有人能给出一些提示吗?

lg40wkob

lg40wkob1#

当你处理媒体文件时,android 10+上运行的设备有一个新功能,这可能会导致你的问题。对于android 10,您可以通过在manitest文件中添加以下行暂时退出作用域存储:

<application android:requestLegacyExternalStorage="true" ... >

相关问题