使用Googles FUSE判断是否挂载了SD CARD

Use Googles FUSE to determine if SD CARD is mounted

我们已经查看了许多处理 SD 卡的 SO post 以及似乎是黄金标准的 SO post But it deals with permissions we are not asking about permission. The question deals with finding another way to determine if the SD CARD is mounted. This question only wants to deal with SDK 23+ The article that discuss FUSE is at this link FUSE

我们已经尝试过此代码,当模拟器弹出 SD 卡时 returns 或计算结果为 TRUE。来自 SO 的其他类似配置也已经过测试。 我的问题不仅是如何检测 SD 卡是否已安装,而且为什么此代码失败?我们不确定此代码是否可以在模拟器上进行测试,或者是否需要真实设备。我们认为此代码失败是因为术语外部存储的概念并不意味着实际的 SD 卡,而是引用内部的辅助外部存储。

       public boolean chkFORSDCARD() {
       String state = Environment.getExternalStorageState();
       if (Environment.MEDIA_MOUNTED.equals(state)) {
            System.out.println("#################### IS ####### TRUE "+state);
            return true;
       }
            System.out.println("##################### IS ###### Not Available "+state);
            return false;
   }

这里是@james_duh 在您的评论`THE_PATH = THE_PATH + "/Documents/"; 中提到的这行代码遇到麻烦的地方。当这行代码设置为 [1]

卸载 SD 卡时将不起作用
 File removable = ContextCompat.getExternalFilesDirs(this, null)[1];

解决方法很简单,删除 THE_PATH = THE_PATH + "/Documents/"; 至于测试是否挂载了SD卡,我还在研究中,敬请期待

这段代码不是很简洁,但是可以用。为什么你想要它工作可能是一个 64K 的问题? ?我已经测试了代码并且它有效。可能或关注的是用于评估路径的词不确定它们是否或将保持一致 这是代码检查状态似乎没有什么意义,因此您可以删除该测试并构建一个新的更合适的测试我没有得到那么远

    public void onAvail() {

    String state = Environment.getExternalStorageState();
    if (state.equals(Environment.MEDIA_MOUNTED) || (!state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)))  {
        File removable = ContextCompat.getExternalFilesDirs(this, null)[1];
        THE_PATH = String.valueOf(removable);
        if(THE_PATH.contains("Android")){
                System.out.println("################################### EXTERNAL Storage "+THE_PATH);
                THE_PATH = THE_PATH + "/Documents/";
        }else {
            File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
            String INTERNAL_PATH = String.valueOf(dir);

            if(INTERNAL_PATH.contains("emulated")){
                System.out.println("######################## $$$$$$$ #### Internal Storage "+INTERNAL_PATH);
            }
        }
    }
}