将图像插入内部存储器

时间:2010-11-03 14:52:50

标签: android

我正在尝试将图像插入Android手机的手机记忆库中。我得到以下例外,虽然当我尝试使用EXTERNAL_CONTENT_URI时没有问题,但如果SD卡不存在,我想写入手机内存。

有人可以给我一个解决方案吗?提前谢谢。

我的代码

ContentValues values = new ContentValues(2);

values.put(Media.DISPLAY_NAME, "My Bitmap");

values.put(Media.MIME_TYPE, "image/jpeg");
Uri uri = getContentResolver().insert(Media.INTERNAL_CONTENT_URI,values);

//Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI,values);

OutputStream outStream = getContentResolver().openOutputStream(uri);

b.compress(Bitmap.CompressFormat.JPEG, 50, outStream);

outStream.close();

###################################
11-03 20:02:48.526: ERROR/DatabaseUtils(167): java.lang.UnsupportedOperationException: Writing to internal storage is not supported.
11-03 20:02:48.526: ERROR/DatabaseUtils(167):     at com.android.providers.media.MediaProvider.generateFileName(MediaProvider.java:1646)
11-03 20:02:48.526: ERROR/DatabaseUtils(167):     at com.android.providers.media.MediaProvider.ensureFile(MediaProvider.java:1337)
11-03 20:02:48.526: ERROR/DatabaseUtils(167):     at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:1413)
11-03 20:02:48.526: ERROR/DatabaseUtils(167):     at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1381)
11-03 20:02:48.526: ERROR/DatabaseUtils(167):     at android.content.ContentProvider$Transport.insert(ContentProvider.java:150)
11-03 20:02:48.526: ERROR/DatabaseUtils(167):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:140)
11-03 20:02:48.526: ERROR/DatabaseUtils(167):     at android.os.Binder.execTransact(Binder.java:287)
11-03 20:02:48.526: ERROR/DatabaseUtils(167):     at dalvik.system.NativeStart.run(Native Method)

1 个答案:

答案 0 :(得分:0)

按照设计,您没有对内部媒体目录的写入权限(除了您自己的空间之外,对内部存储器中的任何空间)。如果您查看Media.INTERNAL_CONTENT_URI.getPath()返回的内容,则会看到它不是您应用程序目录中的位置。

如果要将位图保存到内部存储器,请使用以下代码:

String filename = "My Bitmap.jpg";
FileOutputStream outputStream;

try {
    outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
    b.compress(Bitmap.CompressFormat.JPEG, 50, outputStream);
    outputStream.close();
} catch (Exception e) {
    e.printStackTrace();
}  

在此处阅读更多内容:http://developer.android.com/training/basics/data-storage/files.html