用它们重命名图像后,file.renameTo(file)
它们在图库中变灰并且不可用。我尝试了各种 Intent 来重新扫描图像,最后没有希望,一些在旧版本上的工作有些根本不起作用,所以我正在尝试更新MediaStore
,但不知道如何正确地做到这一点。
这是我的一些代码
这是我早期的方法之一
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: Invalid long: "media" 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): 在 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): 在 android.content.ContentUris.parseId(ContentUris.java:86) 07-04 02:37:18.448: W/MediaProvider(2947): 在com.android.providers.media.MediaThumbRequest.(MediaThumbRequest.java:93) 07-04 02:37:18.448: W/MediaProvider(2947): 在 com.android.providers.media.MediaProvider.requestMediaThumbnail(MediaProvider.java:3742) 07-04 02:37:18.448: W/MediaProvider(2947): 在 com.android.providers.media.MediaProvider.update(MediaProvider.java:4353) 07-04 02:37:18.448: W/ MediaProvider(2947): 在 android.content.ContentProvider$Transport.update(ContentProvider.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)ContentProviderNative.onTransact(ContentProviderNative.java:215) 07-04 02:37:18.448: W/MediaProvider(2947): 在 android.os.Binder.execTransact(Binder.java:404)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
关于 crating bitmap 的标签的 logcat,我确信这样做的唯一方法是使用新数据和位图更新 MediaStore。现在如何查找和删除以前的数据MediaStore
并添加新数据?如果我从 MediaStore 中删除它,是否会导致从磁盘中删除该文件?
提前致谢