我正在尝试查找有关如何以编程方式访问HTC Droid Incredible's
所谓 8GB
Internal Storage Memory
的信息。
要确定External Storage (SD Card) Location
,我正在使用命令:
android.os.Environment.getExternalStorageDirectory().
我无法找到Internal phone Storage
的任何推论。
在检查 HTC / Google Nexus One , Motorola Droid 和 HTC Dream / G1手机时,(正如预期的那样)对于此类Mount Point
,似乎不是Arbitrary Internal Storage
。
在这些手机上,Internal Storage
分为/data
,/system
和/cache
个分区。
不可思议的Internal Storage
肯定不会位于/system
。 /cache
也不太可能,因为它是全局不可读/不可执行。
我在评论中看到,对于应用来说,手机仍然会被限制在512MB
左右,这表明它不仅仅是/data
的子目录。
当然,我自己无法访问Droid Incredible
单位。
答案 0 :(得分:8)
此处有更多信息:Droid Incredible storage mount points。似乎Droid Incredible将其内部存储器安装到/ emmc,据推测安装了r / w。目前尚未验证 WRITE_EXTERNAL_STORAGE
权限是否有必要获得r / w访问权限 - 我正在尝试从Google Code获取此信息
我可能会通过允许用户存储数据的两个选项来解决这个问题:
修改:似乎 WRITE_EXTERNAL_STORAGE
权限已足够:根据droidForums,/ sdcard和/ emmc的GID均为1015.
Edit2:根据Google Group Thread,Incredible返回/ sdcard作为Environment.getExternalStorageDirectory()
的结果值。因此,用户需要决定是否要使用/ sdcard或/ emmc。 Incredible的自动检测可以基于/ emmc路径的存在。
答案 1 :(得分:4)
如您所知,通过权限,对内部存储的访问通常仅限于每个应用程序的某些目录。这是为了阻止一个应用程序从另一个应用程序读取数据,而不使用API来访问系统文件。这是有道理的,因为,例如,如果您有一个网上银行应用程序,您不希望其他应用程序能够访问其任何缓存数据。
每个应用程序都将数据存储在/data/data
下的目录中。但是,通常您不会显式指定路径,而是使用Context.openFileOutput()
之类的方法,这些方法会直接在应用程序的相应子目录中创建文件。
我同意你的意见,不可能将8GB的Incredible存储空间的大部分用于/data
分区。
因此,如果他们要有一个单独的分区,以便将音乐和照片轻松存储在手机的内部存储中,那么他们必须以与现有应用程序兼容的方式进行操作。这意味着使用Environment.getExternalStorageDirectory()
,但由于Incredible也支持SD卡,因此您可以正确使用SD卡。
There is a thread on the Android Developers Google Group讨论这个确切的问题。虽然没有答案(在撰写本文时)关于Incredible如何运作,但有一篇文章称三星Galaxy以这种方式解决了同样的问题:
/sdcard
/sdcard/sd
这似乎是一个明智的解决方案,因为它将与现有应用程序兼容,包括那些错误编码/sdcard
而非使用Environment.getExternalStorageDirectory()
的应用程序。
所以我的建议是在您寻找大面积存储空间时使用Environment.getExternalStorageDirectory()
- SD卡或手机内部 - 并希望每部手机都能返回合理的内容。
答案 2 :(得分:-1)
只需使用它:
String primary_sd = System.getenv("EXTERNAL_STORAGE");
if(primary_sd != null)
Log.i("EXTERNAL_STORAGE", primary_sd);
String secondary_sd = System.getenv("SECONDARY_STORAGE");
if(secondary_sd != null)
Log.i("SECONDARY_STORAGE", secondary_sd)