mkdir()或mkdirs()不适用于Android API 26

时间:2018-05-23 23:11:43

标签: android file android-8.0-oreo

以下代码正在使用其他API但26

public static boolean cretaeDir()
{
    String dir = Environment.getExternalStoragePublicDirectory(Environment.MEDIA_SHARED).getAbsolutePath();
    java.io.File folder = new java.io.File(dir + "/SomeFolderName");
    if (!folder.exists()) {
        try{
            if(folder.mkdir()) {
                Log.e("Creating Folder", "Success");
                return true;
            } else {
                Log.e("Creating Folder", "Failed");
                return false;
            }
        } catch(Exception e){
            e.printStackTrace();
            return false;
        }
    }else{
        return true;
    }
}

在某人问之前,是的,权限已被授予,并且还使用了Manifest文件中的权限。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package.name">


<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="com.android.vending.BILLING" />


<!-- Required OpenGL ES 2.0. for Maps V2 -->
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />


<application/>

测试设备是Samsung S8,运行8.0.0

3 个答案:

答案 0 :(得分:1)

好的,所以这对我有用。

RequestPermission方法,当寻求许可时,先问WRITE_EXTERNAL_STORAGE 。试试吧...

MainActivity.kt

// First permission to be asked
requestPermissions(arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE), 1)
// Then all other permissions

这适用于所有包含API和26以上级别的API。 TBH,我不知道如何,但是它可以工作。

答案 1 :(得分:0)

试试这个

File fsd = Environment.getExternalStorageDirectory();
String filePath = fsd.getAbsolutePath() + "/SomeFolderName";

File dir = new File(filePath);
if(dir.isDirectory==false || !dir.exists()){
    dir.mkdirs();
}

答案 2 :(得分:0)

我已经通过以下方式修复了它,因为我没有剩下其他选项,我已经尝试了所有建议的解决方案。也许错误是设备依赖或其他什么,但它与API 26无关,因为我已将我的一个测试设备升级到API 26并且旧功能确实有效。

以下代码适用于所有设备。

 File file = MyApplication.getInstance().getDir("BUZZ",MODE_PRIVATE);
 cacheDir = new File(file.getAbsoluteFile()+File.separator+IMAGE_DIRECTORY_NAME);

快乐编码: - )