以编程方式访问Verizon HTC Droid Incredible(Android)上的内部存储(不是SD卡)

时间:2010-04-20 07:27:25

标签: android

我正在尝试查找有关如何以编程方式访问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单位。

3 个答案:

答案 0 :(得分:8)

此处有更多信息:Droid Incredible storage mount points。似乎Droid Incredible将其内部存储器安装到/ emmc,据推测安装了r / w。目前尚未验证 WRITE_EXTERNAL_STORAGE 权限是否有必要获得r / w访问权限 - 我正在尝试从Google Code获取此信息

我可能会通过允许用户存储数据的两个选项来解决这个问题:

  1. SD卡
  2. Droid Incredible-only Internal storage
  3. 修改:似乎 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
  • 如果还有SD卡,可以在/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)