我们已经查看了许多涉及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;
}
答案 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);
}
}
}
}