После переименования изображений с помощью 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);
}
Это работает на pre 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): в 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): в java.lang.Long.parseLong(Long.java:352) 07-04 02:37:18.448: W/MediaProvider(2947): в 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)
РЕДАКТИРОВАТЬ: я уверен, что это можно сделать. Потому что, когда я переименовываю или добавляю какой-либо медиафайл, затем с помощью проводника ES File Explorer и изменения пути к этой папке, содержащей медиафайлы, они появляются в галерее и добавляются в хранилище медиафайлов. Восстановление эскиза занимает некоторое время, если у вас много медиафайлов. в этой папке. Кстати, я наблюдаю за логарифмом, когда переименовываю файл изображения: Media Provider object removed
затем какой-то логарифм с тегом art
о создании растрового изображения, я уверен, что единственный способ сделать это - обновить MediaStore новыми данными и растровым изображением. Теперь, как найти и удалить предыдущие данные из MediaStore
и добавить новые? Если я удалю его из MediaStore, это приведет к удалению этого файла с диска?
заранее спасибо