无法在 Android 7.0 中创建文件夹

Posted

技术标签:

【中文标题】无法在 Android 7.0 中创建文件夹【英文标题】:Can't create folder in Android 7.0 【发布时间】:2017-12-10 04:54:19 【问题描述】:

我使用此代码创建文件夹。

 File folder2 = new File(Environment.getExternalStorageDirectory() + "/android");
        if (!folder2.exists()) 
            folder2.mkdir();
        


 File folder = new File(Environment.getExternalStorageDirectory() + "/Android/MyFolder");
        boolean success = true;
        if (!folder.exists()) 
            success = folder.mkdir();
        

它适用于其他设备,但不适用于 android v7.0。

我更改并尝试了 .getAbsolutePath() 和 .getPath(),但这些更改在其他设备上也成功,7.0 仍然没有。

而且清单上有足够的权限

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

请帮助我。感谢您的阅读。

【问题讨论】:

Manifest 权限不算什么,从 6.0+ 开始需要运行时权限才能写入 @EpicPandaForce,谢谢。我现在找到了。 查看此链接:***.com/questions/34342816/… 和 ***.com/a/36937109/1770868 【参考方案1】:
public static final int MULTIPLE_PERMISSIONS = 10; // code you want.

 String[] permissions= new String[]
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
        ;


if (checkPermissions())
         //  permissions  granted.    
          createFolder();


private  boolean checkPermissions() 
        int result;
        List<String> listPermissionsNeeded = new ArrayList<>();
        for (String p:permissions) 
            result = ContextCompat.checkSelfPermission(getActivity(),p);
            if (result != PackageManager.PERMISSION_GRANTED) 
                listPermissionsNeeded.add(p);
            
        
        if (!listPermissionsNeeded.isEmpty()) 
            ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),MULTIPLE_PERMISSIONS );
            return false;
        
        return true;
    


@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) 
    switch (requestCode) 
        case MULTIPLE_PERMISSIONS:
            if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                // permissions granted.
                createFolder();

             else 
                String permissions = "";
                for (String per : permissionsList) 
                    permissions += "\n" + per;
                
                // permissions list of don't granted permission
            
            return;
        
    


private void createFolder()

File folder2 = new File(Environment.getExternalStorageDirectory() + "/Android");
        if (!folder2.exists()) 
            folder2.mkdir();
        


 File folder = new File(Environment.getExternalStorageDirectory() + "/Android/MyFolder");
        boolean success = true;
        if (!folder.exists()) 
            success = folder.mkdir();
        

【讨论】:

谢谢。对于我的问题来说已经足够了。 (Y)【参考方案2】:

如果您在 Android 6.0 或更高版本上运行您的应用。您需要询问run time permission 在您的活动文件中添加此请求权限代码

 String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
            if (ActivityCompat.checkSelfPermission(MainActivity.this, permission)
                    != PackageManager.PERMISSION_GRANTED
                    ) 
                ActivityCompat.requestPermissions(MainActivity.this, new String[]
                        permission,123);

            

【讨论】:

以上是关于无法在 Android 7.0 中创建文件夹的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jackcess 在 Java 中创建一个新的 MS Access 文件

如何在应用程序包中创建和检查子目录

无法在 Jboss EAP 7.0 服务器中创建 oracle 数据源

如何在 XCode 7.0 中创建 dSYM 文件

无法在 Android 11 中创建文件夹(目录),如何创建?

无法使用 PCLStorage 或 Xamarin Forms Labs 在 Android 文件系统中创建文件夹/文件