我有一个应用程序,允许用户使用Intent ACTION_IMAGE_CAPTURE获取并保存新图片。在用户接受新拍摄的图片后,我创建了一个ContentValue对象来设置图片信息,然后我将图片插入MediaStore并发送广播,以便用户在打开图片查看器应用程序(如图库)时可以看到该照片:
ContentValues newImage = new ContentValues(3);
newImage.put(Media.DISPLAY_NAME, mPicName);
newImage.put(Media.MIME_TYPE, "image/png");
newImage.put(MediaStore.Images.Media.DATA, path);
mPictureUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, newImage);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mPictureUri));
所有这些代码都运行正常。照片已正确保存,我可以使用图库查看照片。问题是,当我在图库中查看照片并选择“详细信息”时,它会将照片名称显示为“空”。是的,我知道上面的变量mPicName不是null并且始终具有正确的值。
奇怪的是,当我在运行Android 2.1的Droid上运行我的应用程序时,当我选择将文件复制到手机和计算机上时,我在Windows计算机上打开Droid,当我进入我的应用程序创建了照片文件夹并查看新照片,名称是正确的。然后,当我禁用从手机/电脑复制文件并返回图库查看我的Droid上的文件时,名称突然变得正确,不再为空。
有人可以告诉我为什么我的代码运行后名称为null,以及为什么在我的计算机而不是手机上查看文件后该名称是正确的?有没有办法在保存图片时将名称设置为非空?我敢打赌,如果我关闭手机并将其重新打开,名称将是正确的,但我不确定如何立即让强制性的东西上班。
答案 0 :(得分:0)
答案是通过查看MediaStore的来源。 一个地方在这里: http://devdaily.com/java/jwarehouse/android/core/java/android/provider/MediaStore.java.shtml
基本上,他们还添加了图像的缩略图表示而不是 Media.DISPLAY_NAME,他们使用Media.TITLE。
我使用的代码调整了一点,工作正常。