【问题标题】:Use Googles FUSE to determine if SD CARD is mounted使用 Google 的 FUSE 确定 SD CARD 是否已挂载
【发布时间】:2017-11-06 12:14:52
【问题描述】:

我们查看了许多处理 SD 卡的 SO 帖子以及似乎是黄金标准的 SO 帖子 Gold Standard 但它涉及我们不询问权限的权限。该问题涉及寻找另一种方法来确定是否安装了 SD 卡。这个问题只想处理SDK 23+ 讨论FUSE的文章在这个链接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;
   }

【问题讨论】:

  • 不清楚你在问什么。该代码与 SD 卡无关。
  • @greenapps 我要问的是有没有办法确定 SD 卡是否已安装?并且此代码是否可以做出该决定。很高兴知道是否需要实际设备来测试代码。我很困惑,因为代码来自 Android 开发者网站,上面写着使用此代码来确定是否安装了 SD 卡
  • @greenapps 我们看过这篇 SO 帖子,Commons Ware 提供了关于 SD 卡路径的好建议 stackoverflow.com/questions/5694933/…
  • 范围目录访问非常接近。但与 getExternalFilesDirs() 代码一样,无法区分 SD 卡和 USB 驱动器。自 Android 6 以来,SD 卡可以有两种使用方式,那么您到底想要什么?
  • 你唯一能做的就是让用户指明 SD 卡。您可以使用 Scoped Directory Access 或 Intent.ACTION_OPEN_DOCUMENT_TREE。在这两种情况下,您都必须使用 content:// 方案。那时不能再使用 File 和 FileOutputStream 类。但这没有问题,因为对于那些类,卡是不可写的。我想知道你想用 SD 卡做什么。

标签: android android-sdcard


【解决方案1】:

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

【讨论】:

  • @grendel 所以现在的问题变成了如果用户开始将数据存储在 SD 卡上时该怎么办弹出卡并重新加载应用程序这不是一个额外的问题,只是一个需要处理的问题,因为greenapps 说我们可能必须有一个通知用户的设计
猜你喜欢
  • 2010-10-02
  • 1970-01-01
  • 2019-02-03
  • 2020-02-19
  • 2014-10-04
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多