android10 保存图片到系统相册,刷新媒体库
android9之前,保存图片使用MediaScannerConnection,android10之后,则需要把文件复制到DCIM目录下,虽然android10的方法可以向下兼容,但复制文件效率始终不如刷新媒体库,所以最好是根据SDK_INT选择方法
kotlin写法
suspend fun File.scanFile(context: Context) = suspendCancellableCoroutine<Uri?>{cont->if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){val uri =ContentValues().run {put(MediaStore.MediaColumns.DISPLAY_NAME,name)put(MediaStore.MediaColumns.MIME_TYPE, mimeType())put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM)context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, this)}?.also {context.contentResolver.openOutputStream(it)?.let {val fis = this@scanFile.inputStream()FileUtils.copy(fis,it)fis.close()it.close()}}cont.resume(uri)}else{MediaScannerConnection.scanFile(context, arrayOf(path), arrayOf(mimeType())) { _, uri ->cont.resume(uri)}}
}fun File.mimeType() = URLConnection.getFileNameMap().getContentTypeFor(name)?:"multipart/form-data"
java写法
//保存图片public static void scanFile(File file){String mimeType = getMimeType(file);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){String fileName = file.getName();ContentValues values = new ContentValues();values.put(MediaStore.MediaColumns.DISPLAY_NAME,fileName);values.put(MediaStore.MediaColumns.MIME_TYPE, mimeType);values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM);ContentResolver contentResolver = context.getContentResolver();Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);if(uri == null){ToastUtils.showShort("图片保存失败");return;}try {OutputStream out = contentResolver.openOutputStream(uri);FileInputStream fis = new FileInputStream(file);FileUtils.copy(fis,out);fis.close();out.close();ToastUtils.showShort("图片保存成功");} catch (IOException e) {e.printStackTrace();}}else {MediaScannerConnection.scanFile(context, new String[]{file.getPath()}, new String[]{mimeType}, (path, uri) -> {ToastUtils.showShort("图片已成功保存到" + path);});}}public static String getMimeType(File file){FileNameMap fileNameMap = URLConnection.getFileNameMap();String type = fileNameMap.getContentTypeFor(file.getName());return type;}
android10 保存图片到系统相册,刷新媒体库相关推荐
- Android 删除图片后刷新媒体库
有时候在App内删除了图片,调用图片选择器会看到删除了的图片还存在(显示不出来),这是由于图片被删除了,但是媒体库的记录还存在,没有同步刷新造成的,手机重启后媒体库会被刷新. 我们可以在删除文件后调用 ...
- Android保存图片到系统相册
先说一下思路,我是这样做的,先保存一张图片到可写路径下,用cocos2d的节点截屏功能,保存之后就可以 保存Bitmap到本地指定路径下 ,然后通过广播,通知系统相册图库刷新数据. 先说如何节点截屏: ...
- 微信小程序保存图片到相册;uni-app小程序保存网络图片到相册;小程序保存图片到相册拒绝授权后重新拉起授权;保存图片到系统相册;小程序保存图片测试可以,真机保存图片失败
文末代码可以直接复制使用,图片修改成你的图片路径即可 一.场景: 小程序点击按钮,保存项目内的静态图片或者微信头像或者后端返回的图片: 二.注意点及思路拆分: –2.1:小程序保存图片功能,必须要有s ...
- android 系统相册 多远,【系统相册】Android 保存图片到系统相册
保存完图片后,可以在内存设备的文件系统相册目录下看到对应图片(以小米手机为例,系统相册的路径为:/storage/emulated/0/DCIM/Camera).但是,使用系统图库无法马上看到该图片, ...
- 直播视频app源码,保存图片到系统相册
直播视频app源码,保存图片到系统相册相关的代码 public static void saveImageToGallery(Context context, Bitmap bmp) {// 首先保存 ...
- android 6.0获取图片地址,Android应用开发Android 保存图片到系统相册(三星6.0有效)...
Android 保存图片到系统相册(三星6.0有效).今天要做一个保存图片到系统图库的功能,自身能力较浅,所以只能搜索了但发现网上的方法有几处bug,所以自己总结一下防止以后忘掉也想和大家分享一下 ...
- 微信小程序保存图片到系统相册
function downloadImage(imageUrl) { // 下载文件 wx.downloadFile({ url: imageUrl, success: functio ...
- swift 将图片保存到本地_Swift - 保存图片到系统相册(相机胶卷),并获取存放路径、缩略图...
(本文代码已升级至Swift3) 有时我们需要把图像(比如:从网络上获取的图片.程序自己生成的图片等)保存到系统相册(照片)中,通常有两种办法:一是使用 UIImageWriteToSavedPhot ...
- uniapp 微信小程序保存图片到系统相册(包括获取手机相册权限)即拿即用
目录 1. 代码,即拿即用 2. 介绍使用到的方法 1. uni.getSetting 2. uni.authorize 3. uni.saveImageToPhotosAlbum 4. uni.op ...
最新文章
- vue 递归组件多级_Vue递归组件实现树形结构菜单
- excel 两组数据交点_30秒即可完成Excel数据对比,超高效率,快学起来不要犹豫!...
- 《大话数据结构》第3章 线性表 3.8.2 单链表的删除
- Java 8函数式编程:延迟实例化
- JavaScript 回调函数中的 return false 问题
- leetcode - 279. 完全平方数
- python中的列表理解_掌握『Python列表理解』需要知道的9件事,你知道了吗?
- vmtools 安装不上的方法 我这里介绍下vm14 Ubuntu的系统
- [转]js模块化(一)
- css环形进度条clip,clip实现圆环进度条
- 频率泄露以及加窗原理
- 文本框改变之onpropertychange事件
- K8S加入新的node节点
- 从中国近20年的发展历程看今年的就业困难
- 电脑使用android手机摄像头,电脑怎么使用安卓手机摄像头 电脑使用手机摄像头的方法...
- 微信公众号图灵机器人开发php,使用图灵api创建微信聊天机器人
- ubuntu qq音乐/网易云音乐 播放没有声音,播放mv有声音,解决办法
- mysql主从配置duxi_mysql主从配置
- 射频功放学习之数据关联——DAC元件的使用
- PyTorch学习笔记(1)nn.Sequential、nn.Conv2d、nn.BatchNorm2d、nn.ReLU和nn.MaxPool2d