[使用MediaStore在Android Q中创建/复制文件

问题描述 投票:0回答:1

[我正在尝试找到一种方法,该方法可以处理除媒体文件(图片/视频/音频)以外的任何文件的创建和复制,以将其从Android Q的内部存储中的一个位置复制到另一个位置。在此方法中,我已创建了文件应用程序文件夹,我希望这些文件夹移至“下载文件夹”或我可以在内部存储中创建的某个目录,然后再将其移动。

我搜索并发现下面的代码经过修改,但是缺少一些使之可行的东西。可以帮个忙。

 ContentResolver contentResolver = getContentResolver();
            ContentValues contentValues = new ContentValues();
            contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "sam.txt");
            contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "text/plain");
            contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
            Uri uri = contentResolver.insert(MediaStore.Files.getContentUri("external"), contentValues);
            try {
                InputStream inputStream = contentResolver.openInputStream(uri);
                OutputStream outputStream = new FileOutputStream(Environment.DIRECTORY_DOWNLOADS+"/");

                byte[] buffer = new byte[1024];

                int length;
                //copy the file content in bytes
                while ((length = inputStream.read(buffer)) > 0) {

                    outputStream.write(buffer, 0, length);

                }
                inputStream.close();
                outputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

以上是完整代码,因为我收到错误消息“未知URL”。缺什么?请帮助。

android android-contentresolver
1个回答
0
投票

正如您提到的Environment.getExternalStoragePublicDirectory标记为已弃用。因此,没有常规方法可以获取“下载”目录的路径来将文件保存在那里。或者,您可以使用ACTION_CREATE_DOCUMENT显示路径选择器,然后使用返回的uri将文件写入所选位置。

© www.soinside.com 2019 - 2024. All rights reserved.