拍摄的照片未在相册中显示,但已成功存储在SD卡中。

6

我是一名Android开发的新手,我正在做一个小应用程序,使用 UVCCamera 捕获USB摄像头图像。

我已经使用 UVCCamera 捕获了图像,并将其存储在SD卡中,就像这样:

File filepath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "IMG_"+getDateTime() + ".jpg");
mCameraClient.captureStill(filepath.toString()); 

这里的 mCameraClient 将与 UVC 相机进行交互,捕获图像并存储在该路径中,然后将回调方法 onCaptureDone。

@Override
        public void onCaptureDone(final String path) {
            // TODO Auto-generated method stub
            Log.e(TAG, "onCaptureDone  called");
            getActivity().runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    //Toast -- Images Saved.
                }
            });
        }
    };

然后我从图片按钮的onClickListener中调用相册。

    private MediaScannerConnection conn;

File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
    File[] mImagefile = folder.listFiles(new FilenameFilter() {
                    public boolean accept(File dir, String filename) {

                            return filename.endsWith(".jpg");
                    }
                });

                if (mImagefile.length > 0) {

                    SCAN_PATH = folder.toString() + "/"
                            + mImagefile[mImagefile.length -1].getName();
                    Log.e(TAG, "SCAN PATH = " + SCAN_PATH);

                    if (conn != null) {
                        conn.disconnect();
                    }

                    conn = new MediaScannerConnection(this, this);
                    conn.connect();
                } else {
                    //Toast -- No Images Available
                }

如果过滤成功。
    @Override
    public void onMediaScannerConnected() {
        // TODO Auto-generated method stub
        Log.e(TAG, "onMediaScannerConnected");
        ;
        conn.scanFile(SCAN_PATH, null);
    }

    @Override
    public void onScanCompleted(String path, Uri uri) {
        // TODO Auto-generated method stub
        try {
            Log.e(TAG, "OnCompleted  path = " + path);
            if (uri != null) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(uri);
                startActivity(intent);
            }
        } finally {
            Log.e(TAG, "OnCompleted Disconnecting");
            conn.disconnect();
            conn = null;
        }
    }

我的问题是在画廊中,所有捕获的图像都没有显示。

我已经检查了保存目录,在那里所有的图像都成功存储了。[图像不会损坏,我已经验证过]

我还在默认的画廊应用程序中进行了检查,在那里这些图像也没有显示。

请帮助我解决这个问题。

编辑1:

我注意到一件事情,当我捕获并保存图片时,它不会显示在画廊中,但是经过一段时间,比如2-3小时,它才会出现在画廊中。我想知道为什么会发生这种情况?

谢谢


你需要通知媒体扫描器有关新图像的信息。请参考https://dev59.com/PW445IYBdhLWcg3wq8BY#23078323。 - Harish Sridharan
1
@HarishSridharan:我已经尝试过了,不起作用。 - iosLearner
2个回答

9

在捕获图像并将其保存到SD卡后,请将此行代码放置在其后面。

File image_path="your image path";
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(image_path)));

这里的image_path是保存图像文件的路径。
希望这能帮到你..!

1
你需要将内容插入到媒体库中,并为其创建缩略图。否则,在媒体库进行扫描之前(通常是每两个小时扫描一次新图片),你将无法在画廊中看到它们。
使用以下方法将条目和缩略图添加到媒体库中。
    String imageFilename = "IMG_";
    String originalPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
    String path = "";


    File filepath = new File(originalPath + imageFilename+".jpg");
    mCameraClient.captureStill(filepath.toString());


    try {
        newPath = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), originalPath, imageFilename, "Captuted Image");
    }catch (FileNotFoundException e) {
        e.printStackTrace();
    } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接