获取SD卡的路径

内夫

在拒绝投票和/或将其标记为重复之前,请阅读整篇文章!

我正在开发一个可从用户手机上特定文件夹内读取文件的应用程序-从SD卡(如果有)或从内置存储中读取文件。是的,清单中提到了“ READ_EXTERNAL_STORAGE”,而且我还在处理API> 23的权限弹出窗口。

我曾经简单地使用

File folder = new File(Environment.getExternalStorageDirectory(), "myfolder");

获取存储在内置存储器(S7为32gb)中的文件夹的路径,但是现在我想获取SD卡的路径。根据Google给我的几乎所有结果,“ Environment.getExternalStorageDirectory()”应该为您提供SD卡的路径,但对我而言却没有(而且从来没有)。

我已经使用两种不同的Samsung Galaxy S7(分别使用Android 7.0,一种带有SD卡(+文件夹),另一种没有SD卡(+文件夹))测试了以下内容:

Log.d(tag, System.getenv("EXTERNAL_STORAGE"));
Log.d(tag, System.getenv("SECONDARY_STORAGE"));
Log.d(tag, ""+new File(System.getenv("EXTERNAL_STORAGE")+File.separator+"myfolder").isDirectory());
Log.e(tag, ""+new File(System.getenv("EXTERNAL_STORAGE")+File.separator+ordner).getAbsolutePath());
Log.d(tag, Environment.isExternalStorageRemovable());
Log.d(tag, Environment.getExternalStorageDirectory());
Log.d(tag, Environment.getExternalStorageDirectory().getAbsolutePath());

令我惊讶的是,这两款手机都输出了相同的信息:

/sdcard
null
true
/sdcard/myfolder
false
/storage/emulated/0
/storage/emulated/0

根据文件管理器应用程序(“我的文件”),内置存储称为“内部存储”,这没有什么意义(我知道Android中内部存储和外部存储之间的区别)。

如何获得实际SD卡的路径(不对其进行硬编码)?

内夫

我发现的唯一方法是对它进行半硬编码:

File[] folders = myappcontext.getExternalCacheDirs();

为您提供应用程序有权访问的“缓存”文件夹的路径(但在您卸载应用程序时将被删除)。

如果电话使用可移动SD卡(当前已安装),则阵列的长度应为“ 2”:

  1. 外部(不可移动)存储中“缓存”文件夹的路径
  2. SD卡上“缓存”文件夹的路径

他们看起来像这样:

/storage/emulated/0/Android/data/com.mycompany.myapp/cache
/storage/xxxx-xxxx/Android/data/com.mycompany.myapp/cache

...其中“ x”是您的SD卡的编号(id?)。我只能用2个不同的SD卡对其进行测试,并且两个都有自己的编号。

Environment.getExternalStorageDirectory();

还应该给你

/storage/emulated/0/

这是访问外部存储的非硬编码方式。;)

如果您在PC上SD卡的第一级上创建一个新文件夹,则其路径将是:

/storage/xxxx-xxxx/myfolder

我还必须警告您:虽然您可以读取“ myfolder”文件夹,但是由于Kitkat随附的整个系统已发生更改,因此您无法在其中写入(Android 7只会抛出“ Access Denied”异常) 。但这是另一个问题,我将在一个新问题中解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章