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

我已经使用android API添加了插入到图库中,如下所示:

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

实际上,我已经成功地将完整path(scard / test.jpg)的图像插入到数据库中,但是当您打开图库时,除非您closures/打开设备或挂载/卸载外部设备记忆。

有没有什么方法可以按需要刷新画廊?

谢谢

Bassel Kh。

Solutions Collecting From Web of "在Android中插入图像后,如何刷新图库?"

我最近遇到了这个问题,我试了@Samuh的解决scheme,但是直到我findGoogle示例的解决scheme,

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

我尝试了自己,完美无瑕地工作。

或者,同样,您可能需要查看MediaScanner类的引用,并且StackOverflow上的某个用户之前提出了以下问题: 保存到sdcard的图像未出现在Android的Gallery应用程序中

使用媒体扫描器(sendBroadcast)的解决scheme是非常好的,我用我的应用程序。

但是,很可能在有很多照片和数据的SD卡上,这个操作应该达到很高的处理能力。

还有另一种解决scheme,将媒体文件保存到图库后,应该通知图库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"); // setar isso getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); } 

此代码不会将媒体文件保存到图库中,只会将有关新文件的信息保存在图库数据库中。 你应该存储真实的文件之前。

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

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

你可以使用这个刷新Android图库:

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