首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试SD卡是否已正确安装并可写

测试SD卡是否已正确安装并可写
EN

Stack Overflow用户
提问于 2018-06-11 11:49:11
回答 2查看 798关注 0票数 2

好的,我已经搜索了论坛上下,无法找到一个可接受的答案来测试SD卡是否正确安装和可写在Android 7设备上。(答案很多,但没有一个真正有效)。

我理解必须按照下面的代码使用Environment.getExternalStorageState(),:

代码语言:javascript
复制
 pathName=context.getFilesDir().getAbsolutePath()+"/"+SavePath;
 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
     pathName= Objects.requireNonNull(context.getExternalFilesDir(SavePath)).getAbsolutePath();

但是..。

不管SD卡是否挂载,这总是返回TRUE,因为SD卡是作为模拟资源安装的,而不是可移动的资源。

我可以使用Environment.isExternalStorageEmulated()来检查这个状态,但是它仍然不能告诉我SD卡是否可用。(即: isExternalStorageEmulated()将始终返回true,无论SD卡是否存在,因为它是由文件系统在启动时设置的,并且似乎并不关心插槽中是否有物理SD卡)。

除了尝试写入SD卡和捕获异常错误(如果它不存在)之外,在我尝试写入SD卡之前,有没有其他方法来判断SD卡是否存在?

编辑:

在检讨了建议的解决方案后,这是我所能想出的最好办法。这看起来很笨重。关于如何改进这个问题,有什么建议吗?

代码语言:javascript
复制
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            if (Environment.isExternalStorageEmulated()){
                File[] storage=getExternalFilesDirs(null);

                // Find the first non-emulated storage space
                for (File file: storage){
                    if (!file.toString().contains("emulated/"))
                        System.out.println(file.toString());
                }

            }
        }
EN

回答 2

Stack Overflow用户

发布于 2018-08-17 23:03:49

您的编辑答案看起来不错,因为您放弃了模拟存储。作为另一种选择,您也可以计算目录。如果它大于1(同时丢弃模拟存储),则该存储有一个SD卡:

代码语言:javascript
复制
public boolean hasExternalSD() {
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        //External Storage Emulated
        if (Environment.isExternalStorageEmulated()){
            if (ContextCompat.getExternalFilesDirs(context, null).length > 1) {
                return true;
            }
        }
    }
    return false;
}
票数 1
EN

Stack Overflow用户

发布于 2018-06-11 12:26:02

getFilesDir()getExternalStorageDirectory()在每个安卓设备上都是可用的。

他们与可移动的微SD卡无关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50797046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档