如何在 Android API LEVEL28 使用 Android SAF(存储访问框架)之后将文档文件保存在外部存储中

gul*_*tel 5 android android-storage

此代码适用于媒体文件我想要文档文件的解决方案

我不知道如何为文档文件添加 contentValues

fun getFile(fileName: String): File? {
    with(sharePrefHelper.app){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            val values = ContentValues()
            // Here is My Question That what should i Do Here Because this is for document not for image
            values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName)
            // for MIME_TYPE "image/jpg" this is working
            values.put(MediaStore.Images.Media.MIME_TYPE, "text/csv")
            values.put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/Donny")
            contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)?.let {
                it.path?.let { finalPath ->
                    return File(finalPath)
                }
            }
        } else {
            val directory: File = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM + "/Donny")
            if (!directory.exists()){
                directory.mkdirs()
            }
            return File(directory, fileName)
        }
        return null
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码适用于媒体文件

我的问题是如何将 CSV 文件等文档保存在 Android 设备的外部文件夹中

Lou*_*ert 3

编辑 :

好吧好吧,我仍在尝试在“下载”目录中添加任何类型的文件。就我个人而言,我正在尝试从 assetFolder 复制文件并将其粘贴到“下载”文件夹中。我还没有成功。但是,我目前可以在该文件夹中创建任何类型的文件,它正在使用下面的方法。我希望这可以帮助你。

这是我的代码:

    public void saveFileToPhone(InputStream inputStream, String filename) {
    OutputStream outputStream;
    Context myContext = requireContext();
    try {
        if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.Q){
            ContentResolver contentResolver = requireContext().getContentResolver();
            ContentValues contentValues = new ContentValues();
            contentValues.put(MediaStore.Downloads.DISPLAY_NAME,filename);
            contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
            Uri collection = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
            Uri fileUri = contentResolver.insert(collection, contentValues);
            outputStream = contentResolver.openOutputStream(Objects.requireNonNull(fileUri));
            Objects.requireNonNull(outputStream);

        }
    }catch (FileNotFoundException e) {

        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)