0

我有一个重命名图像的应用程序,并使用 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 中的一些第 3 方媒体扫描仪。也重新启动,因为这也会触发媒体扫描。

但问题仍然存在。

添加了一些显示我描述的问题的图像

文件应用程序中的正确文件名

在 Google 照片应用程序的信息对话框中更正文件名

通过 Google 照片作为邮件附件分享照片后,旧的 Filaname 不正确

4

0 回答 0