本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003
在Android4.4之前我们保存图片到SD卡用发送广播形式通知系统扫描图片,可以在最近的图片中查看到:
-
-
-
-
- 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()断开连接
在这里我做了一个封装,我把源码贴上来:
-
-
-
-
-
- public class MediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {
-
-
-
-
- private MediaScannerConnection mediaScanConn = null;
-
- public MediaScanner(Context context) {
-
- mediaScanConn = new MediaScannerConnection(context, this);
- }
-
-
- private String[] filePaths;
-
- private String[] mimeTypes;
-
-
-
-
-
-
-
- public void scanFiles(String[] filePaths, String[] mimeTypes) {
- this.filePaths = filePaths;
- this.mimeTypes = mimeTypes;
- mediaScanConn.connect();
- }
-
-
-
-
- @Override
- public void onMediaScannerConnected() {
- for (int i = 0; i < filePaths.length; i++) {
- mediaScanConn.scanFile(filePaths[i], mimeTypes[i]);
- }
- filePaths = null;
- mimeTypes = null;
- }
-
- private int scanTimes = 0;
-
-
-
-
-
-
-
- @Override
- public 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