如何在android中的SD卡根目录下创建文件夹?

问题描述

我能够找到 SD 卡的路径并被挂载,我可以创建一个文件夹来缓存目录 (sdcard/Android/data/packagename) 但我无法在根目录下创建一个文件夹SD卡

我的代码是这样的: 获取sd卡

 @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public static List<String> getSdCardPaths(final Context context,final boolean includePrimaryExternalStorage)
    {
        final File[] externalCacheDirs=ContextCompat.getExternalFilesDirs(context,null);
        if(externalCacheDirs==null||externalCacheDirs.length==0)
            return null;
        if(externalCacheDirs.length==1)
        {
            if(externalCacheDirs[0]==null)
                return null;
            final String storageState= EnvironmentCompat.getStorageState(externalCacheDirs[0]);
            if(!Environment.MEDIA_MOUNTED.equals(storageState))
                return null;
            if(!includePrimaryExternalStorage&& Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB&&Environment.isExternalStorageEmulated())
                return null;
        }
        final List<String> result=new ArrayList<>();
        if(includePrimaryExternalStorage||externalCacheDirs.length==1)
            result.add(getRootOfInnerSdCardFolder(externalCacheDirs[0]));
        for(int i=1;i<externalCacheDirs.length;++i)
        {
            final File file=externalCacheDirs[i];

            if(file==null)
                continue;
            Log.e("getsdcard",file.getAbsolutePath());
            final String storageState=EnvironmentCompat.getStorageState(file);
            if(Environment.MEDIA_MOUNTED.equals(storageState))
                result.add(getRootOfInnerSdCardFolder(externalCacheDirs[i]));
        }
        if(result.isEmpty())
            return null;
        return result;
    }

/** Given any file/folder inside an sd card,this will return the path of the sd card */
    private static String getRootOfInnerSdCardFolder(File file)
    {
        if(file==null)
            return null;
        final long totalSpace=file.getTotalSpace();
        while(true)
        {
            final File parentFile=file.getParentFile();
            if(parentFile==null||parentFile.getTotalSpace()!=totalSpace||!parentFile.canRead())
                return file.getAbsolutePath();
            file=parentFile;
        }
    }

现在我得到了内部和 SD 卡的路径,然后我创建了一个这样的文件夹:

List<String> list=getSdCardPaths(HomeActivity.this,true);

            for (int i = 0; i <list.size() ; i++) {
                Log.e("list",list.get(i));
                File root=new File(list.get(i));

                File file=new File(root.getAbsolutePath(),"/Tejas" );
                if(!file.exists())
                {

                    Log.e("create",file.mkdirs()+ "");
                }
                
            }

这在内部存储中有效,但在 SD 卡中返回 false。

我可以在sd卡的缓存目录下创建文件夹,我想在sd卡的根目录下创建

所有权限代码已完成

解决方法

可能是权限问题。 在 Android 10 及更高版本上,您被限制拥有对 SD 卡的写入权限。

查看官方文档了解更多详情。

https://developer.android.com/training/data-storage#permissions

,

从 Android 4 Kitkat 开始只能读取可移动微型 SD 卡。

您只能在卡上 Android 文件夹中的一个特定于应用程序的目录中拥有写入权限。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...