例程
import android.content.ContentValues
import android.content.Context
import android.os.Build
import android.os.Environment
import android.provider.MediaStore
import java.io.File
fun copyDocToPublic(context: Context, srcPath: String, filename: String) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val resolver = context.contentResolver
val values = ContentValues()
values.put(MediaStore.Downloads.MIME_TYPE, "text/plain")
values.put(MediaStore.Downloads.DISPLAY_NAME, filename)
values.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS)
val uri = resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values)
uri?.let {
resolver.openOutputStream(it)?.use { out ->
val scrFile = File(srcPath)
out.write(scrFile.readBytes())
}
}
}
}
说明
1. MediaStore.Downloads.MIME_TYPE 要存的文件类型 2. MediaStore.Downloads.DISPLAY_NAME 文件名 3. MediaStore.Downloads.RELATIVE_PATH 文件存放路路径,这里要说明一下,系统是允许在指定的公共目录之下建自己的子目录的,使用字符串拼接一下就好了,如Environment.DIRECTORY_DOWNLOADS + "/${context.getString(R.string.app_name)}"就会在downloads目录之下创建一个子目录 4. resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values) 插入数据库,方便系统检测
文件类型说明
MIME(Multipurpose Internet Mail Extensions)类型是一种用于标识文件类型的标准,通常由两部分组成,主类型和子类型,中间用斜杠 "/" 分隔。以下是一些常见的 MIME 类型示例:
-
文本文件:
text/plain
: 纯文本文件,如.txt
文件。text/html
: HTML 文件。
-
图像文件:
image/jpeg
: JPEG 图像文件。image/png
: PNG 图像文件。image/gif
: GIF 图像文件。
-
音频文件:
audio/mpeg
: MP3 音频文件。audio/wav
: WAV 音频文件。
-
视频文件:
video/mp4
: MP4 视频文件。video/mpeg
: MPEG 视频文件。
-
应用程序文件:
application/pdf
: PDF 文件。application/msword
: Microsoft Word 文档。application/vnd.ms-excel
: Microsoft Excel 电子表格。
-
压缩文件:
application/zip
: ZIP 压缩文件。
-
消息类型:
message/rfc822
: 邮件消息。
-
多用途类型:
multipart/form-data
: 用于在 HTML 表单中上传文件的 MIME 类型。