Android获取外部存储绝对路径

11
我想下载一些文件并将它们保存到手机/平板电脑的内部存储中。我在三星Galaxy Note 2和Galaxt Tab 10.1上尝试过。当我在它们上使用/storage/sdcard0/时,代码运行成功,但当我在Galaxy Nexus 3上使用时,代码失败了。
我想获取手机或平板电脑内部存储的绝对路径Absolute Path
如果可能的话,怎么做呢?

这个问题在内部/外部之间非常混淆,所以请不要将其作为任何重复内容的提议。 - Chris Stratton
3个回答

33
当我在其中使用/storage/sdcard0/时,代码可以成功运行,但当我在Galaxy Nexus 3上使用时,代码失败了。
/storage/sdcard0/不是内部存储。它是外部存储。
(顺便说一句,由于没有名为“Galaxy Nexus 3”的设备,我假设您只是指“Galaxy Nexus”)
要查找应用程序在内部存储中的位置,请在任何Context(例如Activity)上调用getFilesDir()以获取File对象。
要获取唯一适用于您的应用程序的外部存储位置,请在任何Context(例如Activity)上调用getExternalFilesDir()以获取File对象。
要在外部存储器上获取标准位置(例如电影)的公共目录,请在Environment上调用getExternalStoragePublicDirectory()。
要获取外部存储器的根目录,请在Environment上调用getExternalStorageDirectory()。但是,这被认为是不良编程方式,因为它鼓励开发人员将文件随意放置在随机位置。

我是Android编程的新手。我把文件保存到存储中。例如当我查看我的Galaxy Note 2的 /storage/sdcard0/ 目录时,我看到Whatsapp、Music、Alarm等文件夹。如何获取所有手机/平板电脑的 /storage/sdcard0/ 路径。谢谢。 - Erdinç Özdemir
2
@ErdinçÖzdemir:在Environment上使用getExternalStorageDirectory()。然而,这种方法现在被认为是粗糙的编程方式,因为它鼓励开发人员将文件随意放置在任意位置。此外,代表外部存储的具体路径因制造商和操作系统版本而异。这就是为什么你要使用方法而不是硬编码字符串来查找外部存储位置的原因。 - CommonsWare
@CommonsWare:我在我的LG Optimus设备上有内部存储器,并且它将内部存储器指向**/storage/sdcard0/**,我通过文件管理器进行了检查...所以sdcard0指向内部还是外部有点困惑。 - Shashank
@shihon:“我在我的LG Optimus设备上有内部存储空间”-- 你的LG Optimus设备上有内部和外部存储空间,除非你用锤子之类的东西把它弄坏了,否则你两者都有。请阅读文档以了解“外部存储”的定义。 - CommonsWare
4
为什么我要用锤子毁坏我的设备呢?我知道外部存储的定义,不管怎样感谢你的支持。 - Shashank

10

为什么不能在代码中使用Environment.getExternalStorageDirectory()来获取/storage/sdcard0/路径?

还需要添加权限。

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

1
找到的解决方案是: 1. 编辑模拟器: 2. 进入“Android虚拟设备管理器”,然后编辑模拟器。 3. 为相应的模拟器设置100 MB的SD卡,点击“确定”。 4. 保存并关闭模拟器,然后启动。 这对我有用,该应用程序不再出现错误,并且正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接