Android将图像保存到外部存储,但ContentResolver.insert始终返回null

时间:2014-01-13 16:12:47

标签: android image android-contentresolver

我正在编写Android应用,并试图将位图保存到外部存储中。 我的代码如下。

        ContentValues contents = new ContentValues();
        String curTime = AppSetting.currentDateString();
        contents.put("title", curTime);         
        contents.put("display_name", curTime);
        contents.put("description", curTime);
        contents.put("datetaken", Long.valueOf(System.currentTimeMillis()));
        contents.put("mime_type", "image/jpeg");
        String path = Environment.getExternalStorageDirectory().toString() + "/dcim/camera";
        String hashPath = String.valueOf(path.hashCode());
        String displayName = (new File(path)).getName().toLowerCase();
        contents.put("bucket_id", hashPath);
        contents.put("bucket_display_name", displayName);
        Uri uri = this.getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, contents);//this is always null!!!
        BufferedOutputStream oStream = new BufferedOutputStream(this.getContentResolver().openOutputStream(uri));
        bmp.compress(CompressFormat.JPEG, 100, oStream);
        oStream.close();

但是uri总是空的。 在进行一些研究时,我发现这些消息来源是因为活动被破坏和重建。为了解决这个问题,我将上面的代码添加到Activity的OnCreate()中,但我仍然得到相同的结果 我测试了几个Android设备,但uri总是为空。 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我发现了我的问题 我用下面的宏替换了显示名称并且它有效。

MediaStore.Images.ImageColumns.DISPLAY_NAME

结果我发现这不是“display_name”,它有下划线前缀:“_ display_name”。
希望这可以帮助。