代码之家  ›  专栏  ›  技术社区  ›  Ussaid Iqbal

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

  •  2
  • Ussaid Iqbal  · 技术社区  · 8 年前

    以下代码与其他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 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/>
    

    测试设备为三星S8,运行8.0.0

    3 回复  |  直到 8 年前
        1
  •  0
  •   Suhaib Roomy    8 年前

    您使用的文件夹类型无效。您必须从以下选项中进行选择

    要返回的存储目录的类型。应该是目录音乐、目录播客、目录铃声、目录警报、目录通知、目录图片、目录电影、目录下载、目录DCIM或目录文件之一。不能为空。

    你的代码应该是这样的

    String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
    
        2
  •  0
  •   Deepak kaku    8 年前

    试试这个

    File fsd = Environment.getExternalStorageDirectory();
    String filePath = fsd.getAbsolutePath() + "/SomeFolderName";
    
    File dir = new File(filePath);
    if(dir.isDirectory==false || !dir.exists()){
        dir.mkdirs();
    }
    
        3
  •  0
  •   Ussaid Iqbal    8 年前

    我已经通过以下方式修复了它,因为我没有其他选择,我已经尝试了所有建议的解决方案。也许这个错误是设备相关的,或者其他什么的,但是它与API 26无关,因为我已经将我的一个测试设备升级到了API 26,而旧的函数确实工作了。

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

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

    快乐编码:—)