android - 将图像插入内存

标签 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)

最佳答案

根据设计,您没有写入内部媒体目录的权限(除了您自己的空间之外,内部存储器中的任何空间)。如果您检查 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

关于android - 将图像插入内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4088317/

相关文章:

java - 数据没有通过android应用程序插入mysql数据库

java - Android 应用程序无法正常工作

java - Kotlin split with regex 工作不如预期

java - 如何在 GridView 中将图像和视频显示为缩略图?

java - 每当我创建一个 Activity 时,都会同时创建一个 content_activity 吗?

android - dalvikvm 堆 : Out of memory on a 73547536-byte allocation

java - 获取授权码后使用 Google Android Auth 2.0 HTTP post 请求进行注册

android - 如何解决在直接将图像从 android 库共享到我的 flutter 应用程序时收到的奇怪和不完整的 Uri 和路径

android - 如何在android webview中使用弹出窗口

java - 奥利奥后通知背景颜色