一、工具类

package com.szsh.zpb_company.utilsimport android.content.ContentValues
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.provider.MediaStore
import android.text.TextUtils
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream/*** 相册保存操作*Time:2022/3/22 10:09*/
object DCIMUtil {/*** 根据 Android Q 区分地址* @param context* @return*/fun getDCIMPath(context: Context): String {var fileName = ""fileName = if (Build.VERSION.SDK_INT >= 29) {context.getExternalFilesDir("")?.absolutePath.toString() + "/current/"} else {when {"Xiaomi".equals(Build.BRAND, ignoreCase = true) -> { // 小米手机Environment.getExternalStorageDirectory().path.toString() + "/DCIM/Camera/"}"HUAWEI".equals(Build.BRAND, ignoreCase = true) -> {Environment.getExternalStorageDirectory().path.toString() + "/DCIM/Camera/"}"HONOR".equals(Build.BRAND, ignoreCase = true) -> {Environment.getExternalStorageDirectory().path.toString() + "/DCIM/Camera/"}"OPPO".equals(Build.BRAND, ignoreCase = true) -> {Environment.getExternalStorageDirectory().path.toString() + "/DCIM/Camera/"}"vivo".equals(Build.BRAND, ignoreCase = true) -> {Environment.getExternalStorageDirectory().path.toString() + "/DCIM/Camera/"}"samsung".equals(Build.BRAND, ignoreCase = true) -> {Environment.getExternalStorageDirectory().path.toString() + "/DCIM/Camera/"}else -> {Environment.getExternalStorageDirectory().path.toString() + "/DCIM/"}}}val file = File(fileName)return if (file.mkdirs()) {fileName} else fileName}/*** 判断android Q  (10 ) 版本* @return*/private fun isAndroidQ(): Boolean {return Build.VERSION.SDK_INT >= 29}/*** 复制文件** @param oldPathName* @param newPathName* @return*/fun copyFile(oldPathName: String?, newPathName: String?): Boolean {return try {val oldFile = File(oldPathName)if (!oldFile.exists()) {return false} else if (!oldFile.isFile) {return false} else if (!oldFile.canRead()) {return false}val fileInputStream = FileInputStream(oldPathName)val fileOutputStream = FileOutputStream(newPathName)val buffer = ByteArray(1024)var byteRead: Intwhile (-1 != fileInputStream.read(buffer).also { byteRead = it }) {fileOutputStream.write(buffer, 0, byteRead)}fileInputStream.close()fileOutputStream.flush()fileOutputStream.close()true} catch (e: Exception) {e.printStackTrace()false}}/*** 插入相册 部分机型适配(区分手机系统版本 Android Q)* @param context* @param filePath* @return*/fun insertMediaPic(context: Context, filePath: String?): Boolean {if (TextUtils.isEmpty(filePath)) return falseval file = File(filePath)//判断android Q  (10 ) 版本return if (isAndroidQ()) {if (!file.exists()) {false} else {try {MediaStore.Images.Media.insertImage(context.contentResolver,file.absolutePath,file.name,null)true} catch (e: java.lang.Exception) {e.printStackTrace()false}}} else {val values = ContentValues()values.put(MediaStore.Images.Media.DATA, file.absolutePath)values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")values.put(MediaStore.Images.ImageColumns.DATE_TAKEN,System.currentTimeMillis().toString() + "")context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)context.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://" + file.absolutePath)))true}}}

二、代码调用

      mVb.btnSave.setOnClickListener {showDialog(context)GlobalScope.launch(Dispatchers.IO) {val file = Glide.with(context).asFile().load(url).submit().get()LogUtils.e("Glide path:$file")//文件夹位置val parentPath = DCIMUtil.getDCIMPath(context)//文件名位置val fileName = System.currentTimeMillis().toString()+".png"val filePath = parentPath+fileNameDCIMUtil.copyFile(file.path,filePath)val isSave = DCIMUtil.insertMediaPic(context,filePath)withContext(Dispatchers.Main) {if (isSave) {ToastUtils.showCenter("图片已保存到相册")}else{ToastUtils.showCenter("图片保存失败")}hideDialog()dismiss()}}}

Android DCIM相册保存相关推荐

  1. Android 截图并保存到相册

    2019独角兽企业重金招聘Python工程师标准>>> 参考博客:Android从相册中获取图片以及路径 一.截图方法 屏幕截图,屏幕截图只能截取到当前窗体的图形,并不能截取,网上找 ...

  2. Android开发 拍照+读取相册+保存到本地

    Android Studio 新建项目,Minimum SDK选择API 28: android 9.0(Pie),在华为Mate20 Pro 测试通过. AndroidManifest.xml中添加 ...

  3. 26.Android 下载图片保存到相册

    26.Android 下载图片保存到相册 Android 下载图片保存到相册 前言 实现思路 自定义Dialog 自定义Handler 自定义AsyncTask AndroidManifest配置权限 ...

  4. Android拍照相册裁剪封装

    Android拍照相册裁剪封装 先列出来需要解决问题 展示效果 注意事项 代码 参考资料 最近用到从相机/相册选择图片的功能,这个功能虽然不复杂,网上的代码也一大堆,但是考虑到可能以后别的地方也会用到 ...

  5. android 使用SharedPreferences保存对象

    今天,简单讲讲Android如何使用SharedPreferences保存对象. 记得之前写过一遍博客关于android如何使用SharedPreferences保存List<String> ...

  6. android 将byte[]保存到手机

    今天,讲讲如何把程序的byte[]保存到手机,并且作为文件可以读取. package com.example.edittextresearch;import java.io.BufferedOutpu ...

  7. android对象识别实验报告,Android 3相册实验报告.doc

    Android 3相册实验报告 中原工学院计算机学院 软件平台开发技术大作业 班 级: 软件121 作品名称: 3D相册 姓 名: 辛俊闪 学 号: 201200834101 指导教师: 刘凤华 20 ...

  8. android 相册分组,Android获取相册路径

    Android获取相册路径 (2015-10-14 16:14:38) 标签: android 开发 源代码 freetheory 相册路径 private void getPhotoThumbnai ...

  9. android点击选择相册,android: 从相册中选择照片

    虽然调用摄像头拍照既方便又快捷,但并不是每一次我们都需要去当场拍一张照片的. 因为每个人的手机相册里应该都会存有许许多多张照片,直接从相册里选取一张现有的照 片会比打开相机拍一张照片更加常用.一个优秀 ...

  10. android view 存值,在android studio中保存textview和复选框的值

    问:如何在android studio中保存文本视图和复选框的值,以便稍后我进入该活动时以及在设置新值然后保持新值时可见设置的数据. 答:SharedPreferences用于在Android中存储原 ...

最新文章

  1. BERT的成功是否依赖于虚假相关的统计线索?
  2. 清华唐杰:GPT-3表示能力已经接近人类了,但它有一个阿喀琉斯之踵 | MEET 2021...
  3. ntu课程笔记7454 期中复习
  4. 18行代码AC_Wet Shark and Bishops CodeForces - 621B(数学推导+映射)
  5. c语言变长参数 第一个参数必须吗,一种使用变长参数为C程序构造灵活回调函数的方法...
  6. 【Hadoop】Bad connect ack with firstBadLink as ×.×.×.×:50010
  7. 虚拟 ​router 原理分析- 每天5分钟玩转 OpenStack(101)
  8. linux无网络环境pcre安装,Linux下无网络安装Nginx
  9. java将分布式打包_java版 电子商务Springcloud分布式微服务多用户商城系统-Springboot项目打包...
  10. KaTeX数学公式语法
  11. GO程序设计语言 PDF 黑色的书 百度云
  12. vb6计算机,[计算机软件及应用]VB6.ppt
  13. CreateThread和_beginthread区别及使用
  14. MAC VMware Fusion Centos 设置静态IP
  15. 【日记本砸】21.02.01-12 过程只是过程,目的才是目的。
  16. 浅谈MMORPG服务器架构
  17. 广东高中生多少人_广东2016高考五大变化 考生总人数73.3万
  18. 【POJ】2676-Sudoku 【51Nod】1211-数独(DFS)
  19. 解决sudo update-initramfs -u 时报错
  20. 如何制作一份疫情场所分布地图?(附数据和源码)

热门文章

  1. 利用Excel制作库房管理系统
  2. 工程物料管理信息化建设(一)——什么是工程物料管理系统
  3. 前端-html省份、地市级联
  4. 科普 | USB4的全面解读
  5. ADT版本查看,This Android SDK requires Andr...ate ADT to the latest问题
  6. 大数据项目实战之数据采集
  7. 服务器数据收发测试软件,sokit TCP/UDP 数据包收发测试(调试)工具(Win32)
  8. CCAI2018 | 韩家炜:大规模文本数据挖掘的新方向
  9. 免费服装收银系统哪个好?
  10. java 识别fn键_Fn快捷键全解