问题描述
我能够找到 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 文件夹中的一个特定于应用程序的目录中拥有写入权限。