三星平板电脑上的MediaStore.Images.Media.insertImage失败

时间:2015-08-07 09:39:54

标签: java android android-bitmap

我的代码在Samsung Galaxy平板电脑上崩溃 (例如SM-P601,Android 4.4.2)。

崩溃的代码是这一行:

String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), null, "ShareImage", null);

另一个失败的代码就是OnClick方法:

Bitmap bm = Bitmap.createBitmap(128, 128, Bitmap.Config.ARGB_8888);
String path = MediaStore.Images.Media.insertImage(MainActivity.this.getContentResolver(), bm, "ShareImage", null);
Log.d("tag", path);

例外是:

  

08-07 12:20:41.703 14625-14849 / com.mypackage.testapp.testing   E / MediaStore:无法插入图像       java.io.FileNotFoundException:没有这样的文件或目录               在android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:146)               在android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:611)               在android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:925)               在android.content.ContentResolver.openOutputStream(ContentResolver.java:672)               在android.content.ContentResolver.openOutputStream(ContentResolver.java:648)               在android.provider.MediaStore $ Images $ Media.insertImage(MediaStore.java:937)

  • 在这种情况下,我的上下文对象是传递给它的应用程序上下文 方法
  • 我已添加了读写外部存储空间的所有权限
  • 同样只在特定的三星片上发生
  • 问题不在于位图,如果我创建一个空位图,它就不起作用。
  • 点击按钮
  • 执行以下代码
  • 应用程序不会崩溃,只会在日志中显示异常。

This question没有帮助我。

UPD。

几秒钟后出现此异常:

  

08-07 12:56:13.038 1841-1852 /? E / DatabaseUtils:编写异常   包裹       java.lang.NumberFormatException:无效的long:" null"               在java.lang.Long.invalidLong(Long.java:124)               在java.lang.Long.parseLong(Long.java:341)               在java.lang.Long.parseLong(Long.java:318)               在com.sec.android.gallery3d.provider.GallerySearchDatabase.setTableForTag(GallerySearchDatabase.java:137)               在com.sec.android.gallery3d.provider.GallerySearchDatabase.getImages(GallerySearchDatabase.java:559)               在com.sec.android.gallery3d.provider.GallerySearchProvider.getFindoSuggest(GallerySearchProvider.java:107)               在com.sec.android.gallery3d.provider.GallerySearchProvider.getFindoTagSuggest(GallerySearchProvider.java:111)               在com.sec.android.gallery3d.provider.GallerySearchProvider.query(GallerySearchProvider.java:81)               在android.content.ContentProvider.query(ContentProvider.java:857)               在android.content.ContentProvider $ Transport.query(ContentProvider.java:200)               在android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)               在android.os.Binder.execTransact(Binder.java:404)               在dalvik.system.NativeStart.run(原生方法)

1 个答案:

答案 0 :(得分:0)

public static void fixMediaDir() {
    File sdcard = Environment.getExternalStorageDirectory();
    if (sdcard == null) { return; }
    File dcim = new File(sdcard, "DCIM");
    if (dcim == null) { return; }
    File camera = new File(dcim, "Camera");
    if (camera.exists()) { return; }
    camera.mkdir();
}