解决 Android 写入图片后 系统图库中看不到

    将一个图片通过写入外部存储后,打开系统图库找不到该图片,因为系统图库属于多媒体库,我们保存图片后未通知多媒体扫描,所以看不到保存的图片了

    4.4以下可以通过发送广播通知多媒体库自动扫描,filePath是图片保存的完整路径

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + filePath))); 


  
   4.4 Android把系统广播的权限回收了,只有系统应用才可以发送系统广播  所以4.4以上可以通过 MediaScannerConnection,都会通过这种方式告诉MediaProvider同步媒体数据库。

封装 自定义MediaScanner
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 mimeTypes
     */
    public void scanFiles(String[] filePaths, String[] mimeTypes) {
        this.filePaths = filePaths;
        this.mimeTypes = mimeTypes;
        mediaScanConn.connect();//连接扫描服务
    }

    /**
     * @author YOLANDA
     */
    @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;

    /**
     * 扫描一个文件完成
     * @author YOLANDA
     * @param path
     * @param uri
     */
    @Override
    public void onScanCompleted(String path, Uri uri) {
        scanTimes ++;
        if(scanTimes == filePaths.length) {//如果扫描完了全部文件
            mediaScanConn.disconnect();//断开扫描服务
            scanTimes = 0;//复位计数
        }
    }
}


当图片保存好后,通过MediaScanner更新媒体库
 MediaScanner mediaScanner = new MediaScanner(this);
            String[] filePaths = new String[]{filePath};
            String[] mimeTypes = new String[]{MimeTypeMap.getSingleton().getMimeTypeFromExtension("png")};
            mediaScanner.scanFiles(filePaths, mimeTypes);


猜你喜欢

转载自592713711.iteye.com/blog/2334281