自定义相册中,小米MI Note Pro 调用拍照返回,退出相册再进入,查不到刚拍的照片

拍照返回,相册里展示正常,可选中刚拍的,进行下一步操作。退出相册后,在打开相册,发现刚才拍的找不到了,在系统相册中,可以看到刚才拍的。目前是在小米Note pro机型上发现,暂无其他手机验证。多种调试分析后,确定问题就是查询媒体库MediaStore文件,找不到。对照了下知乎开源相册Matisse,运行这个demo是正常的:

https://github.com/zhihu/Matisse

页面挺丑的,不过不影响,用的是查库刷新库。

发现拍完后 onActivityResult 中,获取照片路径后,并没有用到传统的

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));

而是在实现MediaScannerConnection.MediaScannerConnectionClient接口中,使用:

  MediaScannerConnection mMsc,
  mMsc.connect();  
  mMsc.scanFile(mPath,null);
  mMsc.disconnect();

这样的扫描连接类。

经过测试,拍完退出,再进相册,正常了,可能再某些机型上会有略微的延迟数百ms,不太确定,不过不影响。

代码不多,直接附上:

public class SingleMediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {

private MediaScannerConnection mMsc;

private StringmPath;

private ScanListenermListener;

public interface ScanListener {
      void onScanFinish();
}
public SingleMediaScanner(Context context, String mPath, ScanListener mListener) {
    this.mPath = mPath;
    this.mListener = mListener;
    this.mMsc =new MediaScannerConnection(context,this);
    this.mMsc.connect();
}

 @Override public void onMediaScannerConnected() {
        mMsc.scanFile(mPath,null);
}

@Override
 public void onScanCompleted(String mPath, Uri mUri) {
    mMsc.disconnect();
    if (mListener !=null) {
        mListener.onScanFinish();
  }
}

}

使用时 和 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file))); 一样,都是在拍照完成后,通知刷新媒体库该文件路径:

new SingleMediaScanner(this.getApplicationContext(), path,new SingleMediaScanner.ScanListener() {
      @Override 
      public void onScanFinish() {
      Log.i("SingleMediaScanner","scan finish!");
    }
});

可以直接下一行继续操作。扫描完的回调,一般场景暂时用不到。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容