Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用谷歌保险丝确定是否安装了SD卡_Android_Android Sdcard - Fatal编程技术网

Android 使用谷歌保险丝确定是否安装了SD卡

Android 使用谷歌保险丝确定是否安装了SD卡,android,android-sdcard,Android,Android Sdcard,我们已经看了很多关于SD卡的SO帖子,还有那个似乎是金标准的SO帖子,但它涉及的是权限,我们不是在问权限。问题在于找到另一种方法来确定是否安装了SD卡。这个问题只想处理sdk23+讨论FUSE的文章就在这个链接上 我们已经尝试过这段代码,当模拟器弹出SD卡时,返回或计算为TRUE。SO的其他类似配置也已经过测试。 我的问题不仅仅是如何检测SD卡是否已挂载,还有为什么该代码会失败?我们不确定这段代码是否可以在模拟器上测试,或者是否需要真正的设备。我们认为此代码失败是因为术语“外部存储”的概念不是指

我们已经看了很多关于SD卡的SO帖子,还有那个似乎是金标准的SO帖子,但它涉及的是权限,我们不是在问权限。问题在于找到另一种方法来确定是否安装了SD卡。这个问题只想处理sdk23+讨论FUSE的文章就在这个链接上

我们已经尝试过这段代码,当模拟器弹出SD卡时,返回或计算为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/”;当SD卡卸载时,此代码行设置为[1]时将不工作

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

不清楚你在问什么。该代码与SD卡无关。@greenapps我想问的是,有没有办法确定SD卡是否已安装?这条代码是否能做出这样的决定。如果知道是否需要一个实际的设备来测试代码,那也很好。我很困惑,因为代码来自Android开发者网站,上面说用这个代码来确定SD卡是什么mounted@greenapps我们已经看过这篇文章,其中Commons Ware就SD卡范围的目录访问路径提供了很好的建议。但与getExternalFilesDirs()一样,代码无法区分SD卡和usb驱动器。自从安卓6以来,SD卡有两种使用方式,所以你到底想要什么?你唯一能做的就是让用户指出SD卡。您可以使用作用域目录访问或Intent.ACTION\u OPEN\u DOCUMENT\u树。在这两种情况下,您都必须使用content://方案。此时无法再使用File和FileOutputStream类。但对于那些类别来说,这不是问题,因为卡片是不可写的。我想知道你想用SD卡做什么。@格伦德尔现在的问题是,如果用户开始在SD卡上存储数据,那么该怎么办?弹出SD卡并重新加载应用程序。这不是一个额外的问题,只是一个需要处理的问题,正如greenapps所说,我们可能需要一个通知用户的设计