【问题标题】:getExternalStorageDirectory not working获取外部存储目录不起作用
【发布时间】:2013-03-08 05:41:58
【问题描述】:

我正在尝试将文件保存到运行 4.2.2 的 Samsung Galaxy Nexus 上的 SD 卡。从我正在使用的应用程序中

Environment.getExternalStorageDirectory()

但它会返回

/storage/emulated/0/

这不是我的 SD 卡信息所在的位置。我可以使用任何工作方法来获取 SD 卡的正确路径吗?

【问题讨论】:

  • 您能否显示更多代码,以便我们得到您尝试过的内容?
  • 实际上可能是这样。操作系统可能会在那里加载 sd 卡,并在根目录中创建一个虚拟表示作为驱动器
  • 由于多用户功能,自 4.2 起路径已更改
  • @Gabriele Mariotti 解决方案是什么。你有参考吗?
  • 这里是您问题的完整答案:stackoverflow.com/questions/20734564/…

标签: java android sd-card


【解决方案1】:

其实那是正确的位置。

从 android 4,2 开始,Google 引入了多个用户帐户。每个用户都有他/她自己的外部存储,在路径中有用户 ID 以保持唯一性。

主要(默认)用户的 ID 为 0。因此您将获得 /storage/emulated/0/ 作为外部存储的路径。

【讨论】:

  • 该文件夹中只有 legacy,而不是 0 文件夹。在我的其他应用程序上使用这种方法也没有问题,只有这个。
  • @LukePring 这是一个符号链接。这不是一个实际的文件夹。
  • 你的意思是那里应该有一个符号链接。 /storage/emulated/0: 没有这样的文件或目录
  • Android 在运行应用程序时正在使用 fuse 文件系统。 0 目录在磁盘上不存在(通过 adb shell),但它确实存在于您的应用程序中。
  • 有一个旧文件夹,即“0”
【解决方案2】:

我刚刚了解到这是果冻豆处理缺少android.permission.WRITE_EXTERNAL_STORAGE 权限的方式。我还没有看到旧版本的 Android 出现这种行为。

只需将此行添加到您的 AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

【讨论】:

  • 这本身并不能解决问题。我在我的 Manifest 中有这个设置,它仍然以 /storage/emulated/0 的形式返回。当我为设备使用外壳时 /storage/emulated/0 不存在。不是 0,而是 legacy
  • @MichaelNguyen 您无法从 adb shell 中看到 /storage/emulated/0 目录(甚至不能以 root 身份查看)。它只存在于用户启动的进程中。您应该从设备上的终端模拟器中看到它,并从任何应用程序访问它。
【解决方案3】:

Environment.getExternalStorageDirectory() 指的是设备制造商认为的“外部存储”。我可以是 SD 卡以外的其他东西。

您可以在这里获得更多信息:Find an external SD card location

【讨论】:

    【解决方案4】:

    我认为是因为使用了 genymotion 模拟器, 路径是真的,在 Eclipse 中它位于

    File Explorer - > mnt - > shell - > emulated -> 0 
    

    希望对你有所帮助;)

    【讨论】:

      【解决方案5】:

      确定吗?你认为你的sdcard安装在哪里?尝试在该目录上执行 ls -l - 它可能是指向 /storage/emulated/0/ 的符号链接。

      【讨论】:

      • 我现在正在为另一个应用程序使用 ls -l,符号链接显示在应用程序上,但没有显示在我的终端上,这是最奇怪的事情。
      【解决方案6】:

      我不知何故丢失了 /storage/emulated/0 处的符号链接,导致了类似的故障。我所做的是使用相机应用程序拍照。我观察到图片详细信息说它在 /storage/emulated/0 中,尽管文件资源管理器中不存在该目录。然后我重新启动了手机。重启后链接就存在了。

      【讨论】:

        【解决方案7】:

        尝试使用getExternalFilesDir()getExternalStoragePublicDirectory()

        来自Android 4.2 documentation

        【讨论】:

        • Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 返回路径 /storage/emulated/0/Pictures 在我的 N7 上仍然无效
        • 而且我知道它应该在运行时可用于应用程序(而不是 adb),但是当我显然有多个文件时,无法在该目录中找到任何文件。 (ls /mnt/shell/emulated/0/Pictures/*jpg)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 2016-10-23
        • 1970-01-01
        • 2014-04-08
        相关资源
        最近更新 更多