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

Bas*_* Kh 22 android

我已经使用android API在插件库中添加了如下:

Images.Media.insertImage(ctx.getContentResolver(),"scard/test.jpg","Hello","description");

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

有没有办法按需刷新画廊?

谢谢

巴塞尔Kh.

dum*_*ers 28

我最近遇到了这个问题,我尝试了@ Samuh的解决方案,但在我找到Google示例的解决方案之前不能完美运行:

   // Tell the media scanner about the new file so that it is
    // immediately available to the user.
    MediaScannerConnection.scanFile(this,
            new String[] { file.toString() }, null,
            new MediaScannerConnection.OnScanCompletedListener() {
        public void onScanCompleted(String path, Uri uri) {
            Log.i("ExternalStorage", "Scanned " + path + ":");
            Log.i("ExternalStorage", "-> uri=" + uri);
        }
    });
Run Code Online (Sandbox Code Playgroud)

我努力工作,完美无瑕地工作.

或者,类似地,您可能想要查看MediaScanner类的引用,并且StackOverflow上的某人之前会问这个问题: 保存到SD卡的图像不会出现在Android的Gallery应用程序中


Der*_*rzu 24

使用Media Scanner(sendBroadcast)的解决方案.但是,可能在具有大量图片和数据的sdcards上,此操作应该会达到很高的处理成本.

还有另一种解决方案,在将媒体文件保存到图库后,您应该通知图库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);
}
Run Code Online (Sandbox Code Playgroud)

此代码不会将媒体文件保存到图库,只会将有关新文件的信息保存在图库DB中.您应该先存储真实文件.

此解决方案更快,因为图库不会被完全重新扫描.但不是那么值得信赖,因为有关该文件的所有信息都是手动添加的.