我的代码在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(原生方法)
答案 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();
}