由于最近工作需求的原因,有一个功能就是将webView里面的照片保存到本地,并且能够直接在相册中有一个及时的反馈。

  项目中,具体是实现流程是这样的设计webview点击交互事件,当点击webview中的图片的时候抓取到图片的url地址;当需要保存图片的时候,通过nohttp下载图片并将图片保存到本地,然后更新相册。

  在这里,抓取url地址和下载图片的方案有很多,这里就不在赘述,这里是说明一下如何更新相册,因为这里是一个坑,我一共遇到过两个方案:

方案一:

 发送广播通知系统更新相册。

在网上大部分时候是这样做的,为什么呢?因为简单,只需要发送一个广播就OK了。但是这个方法是一个坑,坑在哪里,一会在说,这里先说一个怎么实现:

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.fromFile(new File(url.webviewImagePath+"/image.jpg")));
File file= (File) object;
Uri uri = Uri.fromFile(file);
intent.setData(uri);
ShowImageActivity.this.sendBroadcast(intent);

  上面代码就是发送广播中的方式,其中url.webviewImagePath+"/image.jpg"是保存到本地的地址和图片格式,file是把下载到图片的对象object转换为file。之后发送广播通知系统更新相册就好。

  那么现在问题来了,坑在哪里。主要是下面两个问题:

  1、相册更新很慢

  这是因为我们向系统发送广播通知,却不能告知系统刷新特定的文件,所以系统会刷新整个sd卡。这样一来,自然相册更新会很慢。

  2、部分安卓版本相册无法更新,重启手机后会更新

  这是因为在部分安卓版本中,考虑到系统安全的问题,是不允许app向系统发送广播,这样一来自然无法更新相册,而另一个方面,手机重新启动,会重新挂载sd卡,这样就会刷新sd开所有东西。

  那么问题来了,既然通过广播的方式刷新相册有这么多坑,那么有没有什么好的方式呢?这就是第二种方式:

方案二:

  使用MediaScanner

  什么是MediaScanner?MediaScanner完成Android中的多媒体文件的扫描工作。例如,mediascanner扫描系统内存和SD卡文件之后,会将扫描的结果加载在数据库中,在Music这个应用程序中看到的显示在activity 的list列表上歌曲专辑名,流派,歌曲时长等信息,都是扫描后的结果放在数据库中,最后读到的数据库中的信息。这里可以明白的一点是:多媒体数据库中的信息是由MediaScanner添加的。下面就是使用的方式:

class SannerClient implements
MediaScannerConnection.MediaScannerConnectionClient { public void onMediaScannerConnected() { if (mFile == null) {
return;
}
scan(mFile, mMimeType);
} public void onScanCompleted(String path, Uri uri) {
mConn.disconnect();
} private void scan(File file, String type) {
if (file.isFile()) {
mConn.scanFile(file.getAbsolutePath(), null);
return;
}
//该方法可以遍历多个文件,这里不需要
File[] files = file.listFiles();
if (files == null) {
return;
}
for (File f : file.listFiles()) {
scan(f, type);
}
}
} public void scanFile(File file, String mimeType) {
mFile = file;
mMimeType = mimeType;
mConn.connect();
}

  在我们需要添加照片到相册的地方,这几调用scanFile就可以了,其中两个参数:file是指添加的文件,mimeType是扫描文件的格式。这样我们可以直接扫描添加特定的文件。提高了速度


不是闷骚的程序员算不上程序员。我的微信公众号“那点鼻事”,在这里周一到周五每天一篇文章,与技术无关,只哈牛逼。

android保存照片到相册的一些事的更多相关文章

  1. Android保存图像到相册

    在应用的图集中,通常会给用户提供保存图片的功能,让用户可以将自己喜欢的图片保存到系统相册中. 这个功能其实很好做,系统提供了现成的API: 简单的来说就这一行代码: [java]  MediaStor ...

  2. iOS开发之保存照片到系统相册(Photo Album)

    iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIIma ...

  3. React Native之图片保存到本地相册(ios android)

    React Native之图片保存到本地相册(ios android) 一,需求分析 1,react native保存网络图片到相册,iOS端可以用RN自带的CameraRoll完美解决,但是andr ...

  4. android将应用中图片保存到系统相册并显示

    我应用到的场景是程序中在视频通讯时截图,将截图保存到本地相册中 /*** @param bmp 获取的bitmap数据 * @param picName 自定义的图片名*/ public static ...

  5. Android调用系统相机拍照保存照片很小解决方案

    保存图片小的一般操作步骤: 1. 调用系统相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityFo ...

  6. iOS开发之保存照片到自己创建的相簿

    iOS开发之保存照片到自己创建的相簿 保存照片还可以用ALAssetsLibrary,ALAssetsLibrary提供了我们对iOS设备中的相片.视频的访问,是连接应用程序和相册之间访问的一个桥梁. ...

  7. android基础---->摄像头与相册的调用

    很多应用程序都可能会使用到调用摄像头拍照和从相册选取图片的功能,今天我们开始android中摄像头与相册调用的学习. 目录导航 调用摄像头拍照 从相册中选择照片 友情链接 调用摄像头拍照 大致流程:调 ...

  8. android 拍照和从相册选择组件

    android 拍照及从相册选择组件 单独封装到一个 activity 中便于更好的复用 拍照或从相册选择成功后使用 EventBus 发出广播回传图片路径,和调用者充分解耦合 根据传入参数支持裁剪和 ...

  9. Android零基础入门第2节:Android 系统架构和应用组件那些事

    原文:Android零基础入门第2节:Android 系统架构和应用组件那些事 继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件. 一.Android ...

随机推荐

  1. 【腾讯Bugly干货分享】你为什么需要 Kotlin

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/xAFKGarHhfQ3nKUwPDlWwQ 一.往事 ...

  2. UVa 10041 - Vito's Family

    题目大意:给出一些点,找到一个位置使这个位置到所有的点的距离的和最短. 很明显,排序,找中位数.关于中位数:有n个从小到大的数,k=(n+1)/2,若n为奇数,k为中位数,若n为偶数,k为中间那两个数 ...

  3. 云脉推出表格识别API接口可以自助接入

    针对如今市场上对于海量票据信息的录入需求,近期厦门云脉技术有限公司推出票据识别相关的产品与服务,更是在云脉OCR SDK开发者平台上上线表格识别API接口,供广大开发者和集成商自助接入.为了降低财务系 ...

  4. 选择移动web开发框架研究——有mui、frozenui以及Sencha Touch等

    纯粹的总结一下移动web开发框架,移动 web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架,jQuery Mobile出自于jQuery家 ...

  5. MySQL只恢复某个库或某张表

    在Mysqldump官方工具中,如何只恢复某个库呢? 全库备份 [root@HE1 ~]#mysqldump -uroot -p --single-transaction -A --master-da ...

  6. 微信小程序来了,小程序都能做些什么

    2017年的微信大动作就是微信小程序了,到底小程序都能做些什么?这是很多人关注的热点,小程序开发对企业又有什么帮助呢?下面让厦门微信小程序开发公司来为你就分析下.       微信小程序与APP的关系 ...

  7. Tomcat配置全攻略

    tomcat的的下载地址http://www.apache.org/dist/jakarta/tomcat-4/ 1.安装jdk,详细操作请参考本站windows 2k和redhat 8.0下java ...

  8. #DP# ----- OpenJudge最大子矩阵

    OpenJudge 1768:最大子矩阵 总时间限制: 1000ms   内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 ...

  9. 二维动态规划——Palindrome

    Palindrome Description A palindrome is a symmetrical string, that is, a string read identically from ...

  10. Ionic在windows下的环境配置难题

    具体的配置方法网上有很多,可以参考http://my.oschina.net/JeeChou/blog/219699?fromerr=k1hPtBUs,但问题还是会有,我总结的主要有以下几个方面: 1 ...