首页 > 解决方案 > 我们可以将文件从 Android 共享存储复制到应用程序的文件夹吗?

问题描述

我想现在每个人都熟悉 Android 针对 api 级别 29+ 引入的最新存储更改。对于 29,他们给出了选择退出这些存储更改的标志。

对于 Android 11,我们是否允许将文件从共享存储复制到应用程序的私有文件夹?

     try {
            if (tempFolder.canWrite()) {
                ContentValues values = new ContentValues();
                values.put(MediaStore.Images.Media.DISPLAY_NAME, photoNamegagalery);
                values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
                values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES);
                Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                OutputStream imageOutStream = getContentResolver().openOutputStream(uri);



                String destinationImagePath = File.separator + photoNamegagalery;
                File source = new File(selectedImagePath);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                    Bitmap bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(getContentResolver(), Uri.fromFile(source)));
                    try {
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, imageOutStream);
                    } finally {
                        imageOutStream.close();
                    }
                }
        }

标签: androidstorageandroid-permissionsandroid-11scoped-storage

解决方案


在 Android 11 上,您无法访问不在您的应用范围内的文件(所谓的“私人文件夹”),除非获得特殊许可。这个选择退出标志就是出于这个原因 - 您应该尽快实现一些功能,将您的数据从存储中的某个文件夹移动到您的应用程序文件夹

用于访问您仍然可以使用的照片/视频MediaStore


推荐阅读