Android打开摄像头保存图片在SD卡中,在相册中能看到所保存的图片

在开发中,我打开摄像头保存图片到SD卡/本地中,但是打开相册没有看到所保存的图片

我在网上找了很多解决方案

目前可以解决的,比较简单的方案是

  

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(temp_file);
intent.setData(uri);
context.sendBroadcast(intent);//这个广播的目的就是更新图库,发了这个广播进入相册就可以找到你保存的图片了!,记得要传你更新的file

还有一个解决方案:

  

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

其中MediaScanner类代码如下:

 

import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;

/**
 *
 * Android把系统广播的权限回收了,只有系统应用才可以发送系统广播
 * 所以4.4以上可以通过 MediaScannerConnection,
 * 都会通过这种方式告诉MediaProvider同步媒体数据库
 *
 * 封装 自定义MediaScanner
 *
 * Created by li on 2017/4/18.
 */

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;

    /**
     * 扫描文件
     *
     * @param filePaths
     * @param 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;

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

这两个我目前试的是可行的,别的方案暂时还没有尝试,如果有的话可以发出来,共同学习一下,希望能帮助到各位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值