【发布时间】:2018-10-12 10:51:44
【问题描述】:
请在投反对票和/或将其标记为重复之前阅读整篇帖子!
我正在开发一个应用程序,该应用程序可以从用户手机上的特定文件夹中读取文件 - 无论是从 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 卡的路径(无需硬编码)?
【问题讨论】:
-
Environment.getExternalStorageDirectory()可以使用。继续关注父文件夹,直到找到 /sdcard/ -
请阅读整篇文章!我的第一个测试已经给了我“/sdcard”,但即使我使用“我的文件”应用程序直接在其中创建了“myfolder”文件夹,第三个测试还是失败了。
-
我可以看到您正在使用
SECONDARY_STORAGE来检查您的文件夹,而不是 EXTERNAL_STORAGE -
上一行。就像我说的:请阅读整篇文章!
-
@LarsH 这是一个非常相似的问题,你是对的,但它已经有 7 年的历史了,而且是关于一个更旧的 Android 版本 - 我问过 Android 7.0,其中可以访问 SD 卡上的文件与例如完全不同的方式安卓 4.3。
标签: android android-sdcard sd-card android-7.0-nougat android-external-storage