我正在尝试将图像插入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)
答案 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