![](/img/trans.png)
[英]MediaStore.Images.Media.insertImage returns null in some devices
[英]MediaStore.Images.Media.insertImage fails on Samsung tablets
我的代碼僅在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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.