Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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中插入图像后,如何刷新库?_Android - Fatal编程技术网

在android中插入图像后,如何刷新库?

在android中插入图像后,如何刷新库?,android,Android,我使用android API添加了一个插入式图库,如下所示: Images.Media.insertImage(ctx.getContentResolver(), “scard/test.jpg”,“你好”, “说明”) 实际上,我通过其完整路径(scard/test.jpg)的图像已成功插入数据库,但当您打开多媒体资料时,除非您关闭/打开设备或装载/卸载外部内存,否则无法看到它 有没有办法按需刷新图库 谢谢 Bassel Kh.使用媒体扫描仪(sendBroadcast)的解决方案。但是,在具

我使用android API添加了一个插入式图库,如下所示:

Images.Media.insertImage(ctx.getContentResolver(), “scard/test.jpg”,“你好”, “说明”)

实际上,我通过其完整路径(scard/test.jpg)的图像已成功插入数据库,但当您打开多媒体资料时,除非您关闭/打开设备或装载/卸载外部内存,否则无法看到它

有没有办法按需刷新图库

谢谢


Bassel Kh.

使用媒体扫描仪(sendBroadcast)的解决方案。但是,在具有大量图片和数据的SD卡上,此操作可能会达到较高的处理成本

还有另一种解决方案,将媒体文件保存到gallery后,应通知gallery DB已插入另一个文件。可以这样做:

private void addImageGallery( File file ) {
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); // or image/png
    getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
此代码不会将媒体文件保存到gallery,只会将有关新文件的信息保存在gallery DB中。您应该先存储真实的文件


此解决方案速度更快,因为库不会被完全重新扫描。但是不那么可靠,因为所有关于文件的信息都是手动添加的。

我最近遇到了这个问题,我尝试了@Samuh的解决方案,但直到我从以下位置找到了解决方案,才完全奏效:

static public boolean resetExternalStorageMedia(Context context) {
    if (Environment.isExternalStorageEmulated())
        return (false);
    Uri uri = Uri.parse("file://" + Environment.getExternalStorageDirectory());
    Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED, uri);

    context.sendBroadcast(intent);
    return (true);
}

static public void notifyMediaScannerService(Context context, String path) {
    MediaScannerConnection.scanFile(context,
            new String[] { path }, null,
            new MediaScannerConnection.OnScanCompletedListener() {
        public void onScanCompleted(String path, Uri uri) {
            Log.i("ExternalStorage", "Scanned " + path + ":");
            Log.i("ExternalStorage", "-> uri=" + uri);
        }
    });
}
我尝试了自己,工作完美无瑕

或者,类似地,您可能希望查看的引用,StackOverflow上的某个人在之前提出了以下问题:

您可以使用此刷新Android Gallery:

public void refreshAndroidGallery(Uri fileUri) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Intent mediaScanIntent = new Intent(
                    Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            mediaScanIntent.setData(fileUri);
            mContext.sendBroadcast(mediaScanIntent);
        } else {
            mContext.sendBroadcast(new Intent(
                    Intent.ACTION_MEDIA_MOUNTED,
                    Uri.parse("file://" + Environment.getExternalStorageDirectory())));
        }
    }

我把所有的东西都绑在一起,然后我找到了这个完美的解决方案! 您可以将此方法应用于任何文件类型(jpg、png、pdf等)

然后

newFIleName是一个文件路径,您可以将文件路径设置为

File newFileName = new File(filePath + "/" + fileName + ".jpg");

由于使用相对文件路径“scard/test.jpg”而不是绝对的“/scard/test.jpg”文件路径,您的aproach无法工作。
public void refreshGallery(File f) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        Intent mediaScanIntent = new Intent(
                Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        Uri fileUri = Uri.fromFile(f); //out is your output file
        mediaScanIntent.setData(fileUri);
        sendBroadcast(mediaScanIntent);
    } else {
        sendBroadcast(new Intent(
                Intent.ACTION_MEDIA_MOUNTED,
                Uri.parse("file://" + Environment.getExternalStorageDirectory())));
    }
}
    
refreshGallery(newFileName);
File newFileName = new File(filePath + "/" + fileName + ".jpg");