2016-12-01 91 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 - 我面臨同樣的問題,你會分享你如何解決這個問題嗎?謝謝 –