2016-12-01 79 views
1

我遇到与Media.insertImage方法 https://developer.android.com/reference/android/provider/MediaStore.Images.Media.html#insertImage(android.content.ContentResolver,%20android.graphics.Bitmap,%20java.lang.String,%20java.lang.String)的Android - MediaStore.Images.Media.insertImage - 无法创建文件

private Uri createTemporaryUri(Bitmap bitmap) 
{ 
    fixMediaDirForKitkat(); 
    String savedPath = MediaStore.Images.Media.insertImage(requestTarget.getMyFragment().getActivity().getContentResolver(), bitmap, "someone_tmp", null); 
    return Uri.parse(savedPath); 
} 

private void fixMediaDirForKitkat() 
{ 
    File sdcard = Environment.getExternalStorageDirectory(); 
    if(sdcard != null) { 
     File mediaDir = new File(sdcard, "DCIM/Camera"); 
     if(!mediaDir.exists()) { 
      mediaDir.mkdirs(); 
     } 
    } 
} 

对于一些奇巧设备(4.4 - 4.4.4)一些奇怪的问题如果不使用方法fixMediaDirForKitkat,insertImage函数有时会返回null。添加方法后,我遇到:

Caused by java.lang.IllegalStateException: Unable to create new file: /storage/sdcard0/DCIM/Camera/1480524677437.jpg 
android.provider.MediaStore$Images$Media.insertImage (MediaStore.java:1008) 
some.one.PhotoUploader.createTemporaryUri (PhotoUploader.java:166) 
some.one.PhotoUploader.beginImageUpload (PhotoUploader.java:145) 
some.one.registration.RegisterFragment.onActivityResult (RegisterFragment.java:107) 

难道什么都需要进行初始化?这里有任何黑客攻击或解决方法吗?设备没有SD卡/空间?无法创建新的文件告诉我任何事情。;-)

任何建议高度赞赏

回答

0

如果你不给的许可,则授予权限,以您的Android清单文件,如果给予忽略它。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

您要创建目录,然后按照这个代码

public static String downloadPath = "/DCIM/Camera"; 
File fileDir = new File(downloadPath); 

if (fileDir.isDirectory()) { 
     request.setDestinationInExternalPublicDir(downloadPath, filename); 
    } else { 
     fileDir.mkdirs(); 
     request.setDestinationInExternalPublicDir(downloadPath, filename); 
    } 

OR 问题似乎它与Android Runtime Permission在安卓6.0

介绍有关当您的应用定位API等级23,默认情况下,所有权限都是false,您必须先请求权限对话框并在将该权限用于您的应用之前批准权限。

+0

嗨忍者,谢谢你的回答。所有关于您提及的权限的事情都已经实现并且正常工作(同时测试了API下面和上面的23)。问题仅在使用KITKAT的某些设备上发生。 – Jacek

+0

@Jacek如果它有帮助,然后请投票,因为有人得到帮助 – Ninja

+0

@Jacek - 我面临同样的问题,你会分享你如何解决这个问题吗?谢谢 –