我已经使用android API在插件库中添加了如下内容:
Images.Media.insertImage(ctx.getContentResolver(), “scard / test.jpg”,“你好”, “描述”);
实际上,我通过其完整路径的图像(scard / test.jpg)已经成功插入到数据库中,但是当您打开图库时,除非关闭/打开设备或挂载/,否则无法看到它卸下外部存储器。
有没有办法按需刷新图库?
由于
Bassel Kh。
答案 0 :(得分:27)
我最近遇到了这个问题,我尝试了@ Samuh的解决方案,但在找到Google's example的解决方案之前不能完美运行:
// 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 Class的引用,StackOverflow上的某人之前询问过此问题: Image, saved to sdcard, doesn't appear in Android's Gallery app
答案 1 :(得分: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);
}
此代码不会将您的媒体文件保存到图库,只会将有关新文件的信息保存在图库DB中。您应该先存储真实文件。
此解决方案更快,因为图库无法完全重新扫描。但不是那么值得信赖,因为有关该文件的所有信息都是手动添加的。
答案 2 :(得分:3)
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);
}
});
}
答案 3 :(得分:2)
您可以使用它来刷新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())));
}
}
答案 4 :(得分:0)
我捆绑了所有东西,然后我找到了这个完美的解决方案! 您可以将这种方法应用于任何文件类型(jpg,png,pdf等)
Sheets("UI").Range("A1").End(xlDown).Select
i = Selection.Row + 1
然后
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())));
}
}
newFIleName是一个文件路径,您可以将其获取为
refreshGallery(newFileName);