DocumentFile.renameTo использует старое имя файла при обмене файлами через галерею - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть приложение, которое переименовывает изображения и использую Document Fileprovider, чтобы иметь возможность переименовывать файлы также во внешнем хранилище. Переименование работает нормально, когда я проверяю имя файла с помощью файлового менеджера, а также когда я просматриваю «Информация» в приложении Google Фото, отображается новое имя файла. Но когда я делюсь файлом через Google Фото и выбираю, например, «Почта», вложение возвращает старое имя файла.

Я попытался обновить хранилище мультимедиа:

Bundle bundle = new Bundle();
bundle.putString("volume", "external");
context.startService(new Intent().setComponent(new ComponentName("com.android.providers.media", "com.android.providers.media.MediaScannerService")).putExtras(bundle));

и

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(newFile));
context.sendBroadcast(intent);

или

private static void updateMediaStore(Context context, File oldFile, File newFile, long taken)
{
    deleteImageFromMediaStore(context, oldFile.getAbsolutePath());
    addImageToMediaStore(context.getContentResolver(), newFile, taken);

}

private static void deleteImageFromMediaStore(Context context, String path)
{
    Uri rootUri = MediaStore.Audio.Media.getContentUriForPath( path );

    context.getContentResolver().delete( rootUri,
            MediaStore.MediaColumns.DATA + "=?", new String[]{ path } );
}

private static void addImageToMediaStore(ContentResolver cr, File filepath, long taken) {
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, filepath.getName());
    values.put(MediaStore.Images.Media.DISPLAY_NAME, filepath.getName());
    values.put(MediaStore.Images.Media.DESCRIPTION, "");
    values.put(MediaStore.Images.Media.MIME_TYPE, Helper.isImageFile(filepath.getAbsolutePath()) ? "image/jpeg": "video/mp4");
    values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis());
    values.put(MediaStore.Images.Media.DATE_TAKEN, taken);
    values.put(MediaStore.Images.Media.DATA, filepath.toString());

    cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}

... также попробовал некоторые сторонние медиа-сканеры из PlayStore. Перезагрузка тоже, так как это также вызывает сканирование мультимедиа.

Но проблема все еще существует.

Добавлены некоторые изображения, которые показывают проблему, которую я описываю

Correct Filename in Files app

Correct Filename in Info dialog of Google Photos app

Incorrect old Filaname after sharing photo via Google Photo as mail attachment

...