问题描述
我的代码仅在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) .content.ContentResolver.openOutputStream(ContentResolver.java:648)在android.provider.MediaStore $ Images $ Media.insertImage(MediaStore.java:937)
- 在这种情况下,我的上下文对象是传递给此方法的应用程序上下文。
- 我已经添加了读取和写入外部存储的所有权限
- 同样,它仅在特定的三星平板电脑上发生
- 问题不在于位图,如果我创建一个空的位图,它将不起作用。
- 在单击按钮时执行以下代码
- 应用程序不会崩溃,只有异常出现在日志中。
对我没有帮助。
UPD。
几秒钟后,出现此异常:
08-07 12:56:13.038 1841-1852 /? E / DatabaseUtils:对包裹java.lang.NumberFormatException的写入异常:无效的long:java.lang.Long.invalidLong(Long.java:124)处的java.lang.Long.parseLong(Long.java:341)处为“ null”在com.sec.android.gallery3d.provider.GallerySearchDatabase.setTableForTag(GallerySearchDatabase.java:137)的java.lang.Long.parseLong(Long.java:318)处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.os.B上的android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112) dalvik.system.NativeStart.run上的inder.execTransact(Binder.java:404)(本机方法)
1楼
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();
}