Android-MediaStore.Images.Media.insertImage-无法创建文件

Android-MediaStore.Images.Media.insertImage-无法创建文件,android,mediastore,Android,Mediastore,我遇到一些与Media.insertImage方法相关的奇怪问题 对于某些kitkat设备(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.pr

我遇到一些与Media.insertImage方法相关的奇怪问题

对于某些kitkat设备(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卡/空间?无法创建新文件说明一切;-)


非常感谢您的任何建议

如果您不授予权限,请授予您的android清单文件权限,如果授予,请忽略它

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
这个问题似乎与Android 6.0中引入的应用程序有关


当您的应用程序针对API级别23时,默认情况下所有权限都为false,您必须在将其用于应用程序之前请求权限对话框并批准权限。

如果您不授予权限,则授予您的android清单文件权限,如果授予,则忽略它

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
这个问题似乎与Android 6.0中引入的应用程序有关


当您的应用程序针对API级别23时,默认情况下所有权限都为false,您必须在将其用于应用程序之前请求权限对话框并批准权限。

嗨,忍者,谢谢您的回答。您提到的关于权限的所有内容都已经实现,并且运行良好(在下面和上面的API中都进行了测试)。问题只发生在一些带有KITKAT的设备上。@Jacek如果有帮助,请投票,因为有人得到了帮助help@Jacek-我也面临同样的问题,你能告诉我你是如何解决的吗?谢谢忍者,谢谢你的回答。您提到的关于权限的所有内容都已经实现,并且运行良好(在下面和上面的API中都进行了测试)。问题只发生在一些带有KITKAT的设备上。@Jacek如果有帮助,请投票,因为有人得到了帮助help@Jacek-我也面临同样的问题,你能告诉我你是如何解决的吗?谢谢
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);
    }