请在投反对票和/或将其标记为重复之前阅读整篇文章!
我正在开发一款应用程序,它可以从用户手机上的特定文件夹中读取文件 - 从 SD 卡(如果有的话)或从内置存储中读取。是的,清单中提到了“READ_EXTERNAL_STORAGE”,我还在处理 API>23 的权限弹出窗口。
我以前只是简单地使用
File folder = new File(Environment.getExternalStorageDirectory(), "myfolder");
获取存储在内置存储(S7 为 32GB)中的文件夹的路径,但现在我想获取 SD 卡的路径。根据谷歌给我的几乎每一个结果,“Environment.getExternalStorageDirectory()”应该为您提供SD卡的路径,但对我来说它没有(而且从来没有)。
我用两台不同的三星 Galaxy S7 进行了以下测试,两台手机都运行 Android 7.0,一台带有 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 卡的路径(无需对其进行硬编码)?