Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 捕获的图像未显示在gallery中,但已成功存储在SD卡中_Android_Image_Android Gallery_Android Mediascanner - Fatal编程技术网

Android 捕获的图像未显示在gallery中,但已成功存储在SD卡中

Android 捕获的图像未显示在gallery中,但已成功存储在SD卡中,android,image,android-gallery,android-mediascanner,Android,Image,Android Gallery,Android Mediascanner,我是android开发新手,我正在使用UVCCamera开发一个小型应用程序来捕获USB Camrea图像 我用UVCCamera拍摄了图像,并像这样存储在SD卡中 File filepath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "IMG_"+getDateTime() + ".jpg"); mCameraClient.captureStill(filepath

我是android开发新手,我正在使用
UVCCamera
开发一个小型应用程序来捕获USB Camrea图像

我用
UVCCamera
拍摄了图像,并像这样存储在SD卡中

File filepath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "IMG_"+getDateTime() + ".jpg");
mCameraClient.captureStill(filepath.toString()); 
在这里,mCameraClient将使用UVC摄像头捕获图像并存储在该路径中,它将在捕获完成后回调方法

@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.
                }
            });
        }
    };
然后我从图像按钮调用gallery
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小时的时间,它出现在图库中。 我想知道为什么会发生这种情况?


谢谢

您必须插入媒体库并为其创建缩略图。否则,在media gallery进行扫描之前(通常计划为每两小时扫描一次新图像),您将无法在gallery中看到它们

使用以下命令创建媒体库的条目和缩略图

    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();
    } 

在捕获图像后放入这行代码并将其保存到sd卡

File image_path="your image path";
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(image_path)));
此处image\u path是保存的图像文件的路径


希望这对你有帮助

您必须将新图像通知媒体扫描仪。参考@HarishSridharan:我已经试过了,但没有成功