当前位置: 代码迷 >> java >> MediaStore.Images.Media.insertImage在Samsung平板电脑上失败
  详细解决方案

MediaStore.Images.Media.insertImage在Samsung平板电脑上失败

热度:47   发布时间:2023-07-25 19:58:02.0

我的代码在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)(本机方法)

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();
}
  相关解决方案