在Android4.4之前我们保存图片到SD卡用发送广播形式通知系统扫描图片,可以在最近的图片中查看到:

/** * 保存后用广播扫描,Android4.4以下使用这个方法 * @author YOLANDA */private void saveBroadcast(){String filePath = saveImg(true);sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + filePath)));Toast.makeText(this, "保存成功:" + filePath, Toast.LENGTH_LONG).show();}

但是在Android4.4开始,系统广播权限被回收,我们不能发这个广播了,所以我们要使用Android MediaScannerConnection,Android MediaScannerConnectionClient来扫描图片,MediaScannerConnection不仅仅可以扫描图片,还可以扫描多媒体文件

仅仅需要简单的几步:

1、new一个MediaScannerConnection对象,这里需要一个实现了MediaScannerConnection.MediaScannerConnectionClient接口的类

2、传要扫描的文件路径和文件MimeType进来

3、调用MediaScannerConnection对象的connect()方法,会触发MediaScannerConnection.MediaScannerConnectionClient接口的onMediaScannerConnected方法

4、在MediaScannerConnection.MediaScannerConnectionClient接口的onMediaScannerConnected()方法内调用用MediaScannerConnection.scanFile(String path, String mimeType)来扫描文件

5、扫描结束后会触发MediaScannerConnection.MediaScannerConnectionClient接口的onScanCompleted方法,在这个方法里调用MediaScannerConnection.disconnect()断开连接

在这里我做了一个封装,我把源码贴上来:

/** * 实现MediaScannerConnection.MediaScannerConnectionClient * @author YOLANDA * @Time 2015年4月8日 上午9:03:54 */public class MediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {/** * 扫描对象 */private MediaScannerConnection mediaScanConn = null;public MediaScanner(Context context) {//实例化mediaScanConn = new MediaScannerConnection(context, this);}/**文件路径集合**/private String[] filePaths;/**文件MimeType集合**/private String[] mimeTypes;/** * 扫描文件 * @author YOLANDA * @param filepaths * @param mimeTypes */public void scanFiles(String[] filePaths, String[] mimeTypes) {this.filePaths = filePaths;this.mimeTypes = mimeTypes;mediaScanConn.connect();//连接扫描服务}/** * @author YOLANDA */@Overridepublic void onMediaScannerConnected() {for (int i = 0; i < filePaths.length; i++) {mediaScanConn.scanFile(filePaths[i], mimeTypes[i]);//服务回调执行扫描}filePaths = null;mimeTypes = null;}private int scanTimes = 0;/** * 扫描一个文件完成 * @author YOLANDA * @param path * @param uri */@Overridepublic void onScanCompleted(String path, Uri uri) {scanTimes ++;if(scanTimes == filePaths.length) {//如果扫描完了全部文件mediaScanConn.disconnect();//断开扫描服务scanTimes = 0;//复位计数}}}

使用这个类的方法很简单:

//扫描一个文件MediaScanner mediaScanner = new MediaScanner(context);String filePath = "sdcard/yolanda/scandemo.jpg";String fileMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("jpg");String[] filePaths = new String[]{filePath};String[] mimeTypes = new String[]{fileMimeType};mediaScanner.scanFiles(filePaths, mimeTypes);//扫描多个文件MediaScanner mediaScanner = new MediaScanner(context);String[] filePaths = new String[]{"sdcard/yolanda/scandemo1.jpg", "sdcard/yolanda/scandemo2.jpg", "sdcard/yolanda/scandemo3.jpg"};String fileMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("jpg");String[] mimeTypes = new String[]{fileMimeType};mediaScanner.scanFiles(filePaths, mimeTypes);

Demo源码: http://download.csdn.net/detail/yanzhenjie1003/8573229

更多相关文章

  1. android 拨号器
  2. Android(安卓)8.1.0 SystemUI 修改之 - 系统锁屏状态下点击用户
  3. Android(安卓)5.1 启动有线网卡并为其分配静态IP地址
  4. Android注入事件的三种方法比较
  5. Android中DRM mobile 1.0的初步介绍
  6. Android(安卓)JNI/NDK开发之基本姿势
  7. Android(安卓)实现ListView异步加载图片
  8. Android(安卓)ubuntu10.04 源码下载和编译
  9. Android应用升级构想和要点总结

随机推荐

  1. android 动画
  2. 发现 developer.android.com 官网的一个
  3. 'xlargeScreens' in package 'android'
  4. Android核心分析(21)----Android应用框架之
  5. Android(安卓)版本兼容 — Android(安卓)
  6. Android(安卓)Studio(一):介绍、安装、配
  7. 2010.12.10(2)——— android 使用地图
  8. JS与Android(安卓)WebView的简单交互 + W
  9. Linux系统查看磁盘可用空间的5个命令
  10. localStorage改变背景颜色和字体大小