使用file.renameTo(file)
重命名图像后,它们会在图库中变灰并变为不可用。我尝试了各种意图重新扫描图像,最后没有希望,一些旧版本的工作根本没有用,所以我试图更新MediaStore
,但没有&#39 ;确定如何做到这一点。
这是我的一些代码
这是我早期的方法之一
MediaScannerConnection.scanFile(mContext,
filesPath , null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
另一个
private void scanMedia(File file) {
Uri uri = Uri.fromFile(file);
Intent scanFileIntent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
mContext.sendBroadcast(scanFileIntent);
}
这项工作是在19岁之前,而不是在kitkat
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
这是MediaStore的一个
int row = mContext.getContentResolver()
.update(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
valuesNewFilePath,
MediaStore.MediaColumns.DATA + "='" + oldFilePath + "'",
null);
此方法在logcat
中抛出此非致命异常07-04 02:37:18.448:W / MediaProvider(2947):java.lang.NumberFormatException:无效的长:"媒体" 07-04 02:37:18.448:W / MediaProvider(2947):at java.lang.Long.invalidLong(Long.java:124)07-04 02:37:18.448:W / MediaProvider(2947):at java。 lang.Long.parse(Long.java:361)07-04 02:37:18.448:W / MediaProvider(2947):at java.lang.Long.parseLong(Long.java:352)07-04 02:37: 18.448:W / MediaProvider(2947):at java.lang.Long.parseLong(Long.java:318)07-04 02:37:18.448:W / MediaProvider(2947):at android.content.ContentUris.parseId(ContentUris .java:86)07-04 02:37:18.448:W / MediaProvider(2947):at com.android.providers.media.MediaThumbRequest。(MediaThumbRequest.java:93)07-04 02:37:18.448:W / MediaProvider(2947):at com.android.providers.media.MediaProvider.requestMediaThumbnail(MediaProvider.java:3742)07-04 02:37:18.448:W / MediaProvider(2947):at com.android.providers.media.MediaProvider .update(MediaProvider.java:4353)07-04 02:37:18.448:W / MediaProvider(2947):在android.content.ContentProvider $ Transport.update(ContentProvi) der.java:287)07-04 02:37:18.448:W / MediaProvider(2947):在android.content.ContentProviderNative.onTransact(ContentProviderNative.java:215)07-04 02:37:18.448:W / MediaProvider( 2947):在android.os.Binder.execTransact(Binder.java:404)
编辑:我确信这可以做到。因为当我重命名或添加一些媒体文件,然后使用ES文件资源管理器并更改包含该文件夹的媒体的路径时,它们会出现在图库中并添加到媒体存储中,如果您需要更多媒体,则需要一些时间来重新生成缩略图在那个文件夹上。顺便说一下,当我重命名一个图像文件时,我会看到logcat:Media Provider object removed
然后是一些标记为art
的logcat关于crating位图,我确定唯一的方法是使用new更新MediaStore数据和位图。现在如何查找和删除MediaStore
中的普通数据并添加新数据?如果我从MediaStore中删除它是否会导致从磁盘中删除该文件?
提前致谢
答案 0 :(得分:4)
此方法适用于android-21:
public static boolean renameImageFile(Context c, File from, File to) {
to = getFileWithUnicName(to);
if (from.renameTo(to)) {
removeMedia(c, from);
addMedia(c, to);
return true;
} else {
return false;
}
}
public static void addMedia(Context c, File f) {
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(f));
c.sendBroadcast(intent);
}
private static void removeMedia(Context c, File f) {
ContentResolver resolver = c.getContentResolver();
resolver.delete(Images.Media.EXTERNAL_CONTENT_URI, Images.Media.DATA + "=?", new String[] { f.getAbsolutePath() });
}
您应尝试先删除旧行,然后添加新行,而不是尝试直接更新媒体库中的图像文件,而应尝试先删除旧行。
告诉我它是否解决了你的问题。