android 29之后存文件到公共目录

例程

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 类型示例:

  1. 文本文件:

    • text/plain: 纯文本文件,如 .txt 文件。
    • text/html: HTML 文件。
  2. 图像文件:

    • image/jpeg: JPEG 图像文件。
    • image/png: PNG 图像文件。
    • image/gif: GIF 图像文件。
  3. 音频文件:

    • audio/mpeg: MP3 音频文件。
    • audio/wav: WAV 音频文件。
  4. 视频文件:

    • video/mp4: MP4 视频文件。
    • video/mpeg: MPEG 视频文件。
  5. 应用程序文件:

    • application/pdf: PDF 文件。
    • application/msword: Microsoft Word 文档。
    • application/vnd.ms-excel: Microsoft Excel 电子表格。
  6. 压缩文件:

    • application/zip: ZIP 压缩文件。
  7. 消息类型:

    • message/rfc822: 邮件消息。
  8. 多用途类型:

    • multipart/form-data: 用于在 HTML 表单中上传文件的 MIME 类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中下载 HTTPS 文件到指定目录,可以通过以下步骤实现: 1.创建一个 URL 对象,指定 HTTPS 文件的 URL 地址。 2.打开一个 HttpsURLConnection 连接,使用 URL 对象的 openConnection() 方法获取连接对象。 3.设置连接对象的一些属性,如请求方式、超时时间、是否允许输入输出等。 4.获取连接对象的输入流,读取 HTTPS 文件的内容。 5.将输入流中的数据写入指定目录下的文件中,可以使用 FileOutputStream 类实现。 以下是一个简单的代码示例: ``` URL url = new URL("https://example.com/file.txt"); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); conn.setDoInput(true); conn.connect(); InputStream inputStream = conn.getInputStream(); File dir = new File(Environment.getExternalStorageDirectory() + "/myapp/download"); if (!dir.exists()) { dir.mkdirs(); } File file = new File(dir, "file.txt"); FileOutputStream fos = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) != -1) { fos.write(buffer, 0, len); } fos.close(); inputStream.close(); ``` 注意:需要在 AndroidManifest.xml 文件中添加读写外部储的权限 `<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>`。同时,为了保证 HTTPS 安全性,需要使用正式的证书来验证服务器身份,可以参考 Android 官方文档中的 HTTPS 部分进行配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值