使用Googles FUSE确定是否已安装SD CARD

时间:2017-11-02 18:28:07

标签: android android-sdcard

我们已经查看了许多涉及SD卡的SO帖子以及似乎是黄金标准的SO帖子Gold Standard但是它涉及我们不会询问许可的权限。问题涉及找到另一种方法来确定SD卡是否已安装。这个问题只想处理SDK 23+讨论FUSE的文章就在这个链接FUSE

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

       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;
   }

1 个答案:

答案 0 :(得分:1)

这就是@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);
            }
        }
    }
}