【问题标题】:Image disappears in Android Gallery when renamed重命名时图像在 Android 图库中消失
【发布时间】:2013-05-08 19:47:27
【问题描述】:

我正在尝试重命名从相机拍摄的图库中的图像以提供新名称。当我重命名文件时,原始图像消失,显示 2 个黑色方块。任何人都可以通过告诉我重命名图库图片的过程来帮助我解决这个问题。

路径如下:/mnt/sdcard/DCIM/Camera

我尝试通过内容提供商更新图片标题,如下所示:

ContentValues val = new ContentValues();
val.put(Images.Media.TITLE, "ImageTitle23");
getContentResolver().update(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, val, null, null);

图库中的图片标题已更改。

但是当我尝试如下查询更新后的图像时,我得到的名称与前一个相同:

final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";   
Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, MediaStore.Images.Media._ID+"="+id, null, imageOrderBy);  
if(imageCursor.moveToFirst()){    
  int idd = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID)); 
  String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); 

谁能帮我解决这个问题?

【问题讨论】:

    标签: android android-layout image-processing android-intent


    【解决方案1】:

    MediaStore 会查找图片中的更改,但它不会实时响应所有更改。每次进行此类修改时,都应要求 MediaScanner 扫描此文件:

    MediaScannerConnection.scanFile(
      getApplicationContext(), 
      new String[]{file.getAbsolutePath()}, 
      null, 
      new OnScanCompletedListener() {
         @Override
         public void onScanCompleted(String path, Uri uri) {
            Log.v("grokkingandroid", 
                  "file " + path + " was scanned seccessfully: " + uri);
         }
      });
    

    此外,您应该查看this blog post,它提供了有关此用例的许多有用信息。

    【讨论】:

      【解决方案2】:

      图库正在与 MediaStore 内容提供者交互。如果您更改图像文件的名称,您可能需要更新内容提供程序中的字段。

      您可以在 MediaStore 参考中阅读它:http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html

      您可能会触发 MediaStore 的刷新。看看这个帖子:How can I refresh MediaStore on Android?

      【讨论】:

      • 我尝试通过内容提供程序更新图片标题,如下所示:
        ContentValues val = new ContentValues();
        val.put(Images.Media.TITLE, "ImageTitle23");
        getContentResolver().update(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, val, null, null);
      • 按照你说的修改了代码,但是更新图像后尝试查询时仍然得到相同的名称。
      猜你喜欢
      • 2019-04-18
      • 1970-01-01
      • 2011-05-24
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      相关资源
      最近更新 更多