getExternalStorageDirectory无效

Luk*_*ing 44 java android sd-card

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

Environment.getExternalStorageDirectory()
Run Code Online (Sandbox Code Playgroud)

但它回来了

/storage/emulated/0/
Run Code Online (Sandbox Code Playgroud)

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

Rag*_*ood 15

实际上,这是正确的位置.

从android 4,2起,Google引入了多个用户帐户.每个用户都有自己的外部存储,在路径中具有用户ID以保持唯一性.

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

  • Android在运行应用程序时使用了fuse文件系统.磁盘上没有0目录(通过adb shell),但它确实存在于您的应用程序中. (3认同)
  • 只有该文件夹中的遗留物,而不是0文件夹.在我的其他应用程序上使用此方法也没有问题,只有这一个. (2认同)

oha*_*eck 9

我刚刚了解到这是Jelly Bean处理缺乏android.permission.WRITE_EXTERNAL_STORAGE许可的方式.我还没有看到旧版Android的这种行为.

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

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

  • 这本身并不能解决问题.我在我的Manifest中设置了它,它仍然以**/storage/emulated/0**的形式返回.当我使用shell作为设备时**/storage/emulated/0**不存在.而不是**0**,**遗产**就在那里. (25认同)
  • @MichaelNguyen您无法从adb shell中看到**/storage/emulated/0**目录(甚至不是root用户).它仅存在于用户启动的进程中.您应该从设备上的终端仿真器中看到它,并从任何应用程序访问它. (4认同)

Alb*_*urg 5

Environment.getExternalStorageDirectory()指设备制造商认为是"外部存储"的任何内容.我可以是SD卡以外的东西.

您可以在此处获得更多信息:查找外部SD卡位置