照片和视频保存到本地的方法大致都是通过流的方式写入文件里面就可以达到保存到文件夹的目的,但是你保存到文件夹的资源却不一定能够在相册显示出来,只能翻看文件管理。
怎么能够将保存到本地的照片视频显示在系统相册中,最常用的方式是发送广播扫描的方式来通知系统扫描文件夹,但是这种方式经常不起作用,根本原因在于,向系统发送广播时系统只会去扫描系统资源的相册,如果你保存的文件夹是自己建立的,那么你发广播时系统是不会扫描到的。
解决这个问题,想要显示在相册需要将数据插入到ContentProvider
中,因此对于非系统能够扫描到的相册我们使用手动插入的方式。
保存到系统资源相册
系统相册指的的是Camera
、DCIM
等等这些目录对应的相册,可能还有其他系统会自动扫描的相册,但是暂时没有去整理这些。
对于系统相册来说,只需要发送广播进行扫描即可,数据会自动添加到ContentProvider
中,当然如果不发送广播,在手机重启或者过一段时间之后,扫描操作仍会开启,因此绝对绝对不可以自己去进行插入操作,否则相册中会出现两张相同的照片。
1 | /** |
保存到非系统资源相册
保存到非系统资源相册中时,我们就需要进行ContentProvider
的插入更新,来达到可以在相册显示的目的。
初始化 ContentValues 公共字段
照片和视频是有一些公共字段,写一个初始化公共字段的方法,简化MediaStore
字段的写入操作。
1 | /** |
插入照片资源
保存照片到本地,并通知相册显示,需要注意的时间的单位必须是ms
1 | /** |
插入视频资源
保存视频到本地,并通知相册显示,需要注意的时间的单位必须是ms
1 | /** |
注意
在应用过程中发现,vivo手机和魅族手机部分机型只支持在文件管理中查看视频,使用本文描述的方法添加后没有效果,用微信保存视频试了一下同样不能在相册中将视频显示出来,应该是手机的原因,特此声明。
附源码
贴一下工具类源代码,多了一些辅助方法,比如获取mime_type
的参数等方法。
1 | /** |