Программный доступ к внутренней памяти (не SD-карте) в Verizon HTC Droid Incredible (Android) - PullRequest
12 голосов
/ 20 апреля 2010

Я пытаюсь найти информацию о том, как программно получить доступ к 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 ]

8 голосов
/ 27 июня 2010

Более подробная информация здесь: Droid Невероятные точки монтирования хранилища . Кажется, что Droid Incredible монтирует свое внутреннее хранилище в / emmc, предположительно смонтированный r / w. Пока еще не проверено, требуется ли разрешение WRITE_EXTERNAL_STORAGE для получения правого доступа - я пытаюсь получить эту информацию из Google Code

Я, вероятно, решу эту проблему, предоставив пользователю два варианта хранения данных:

  1. SD-карта
  2. Droid Невероятно-только Внутренняя память

Редактировать: Кажется, что разрешение WRITE_EXTERNAL_STORAGE достаточно: согласно droidForums и / sdcard, и / emmc имеют одинаковый GID 1015

Редактировать2: в соответствии с потоком группы Google Невероятный возвращает / SDCard в качестве значения результата Environment.getExternalStorageDirectory(). Следовательно, пользователь должен решить, хочет ли он использовать / sdcard или / emmc. Автоопределение Incredible может основываться на существовании пути / emmc.

4 голосов
/ 20 апреля 2010

Как вам известно, доступ к внутреннему хранилищу обычно ограничен определенными каталогами для каждого приложения в соответствии с разрешениями. Это должно остановить одно приложение, считывающее данные из другого, и доступ к системным файлам без использования API. Это имеет смысл, поскольку, например, если у вас есть приложение для интернет-банкинга, вы не хотите, чтобы другие приложения имели доступ к любым его кэшированным данным.

Каждое приложение получает данные для хранения в каталоге под /data/data. Однако обычно вы не указываете пути явно, а используете такие методы, как Context.openFileOutput(), который создает файл в соответствующем подкаталоге вашего приложения напрямую.

Я согласен с вами, что маловероятно, что большая часть 8 ГБ хранилища Incredible будет использоваться для раздела /data.

Так что, если у них будет отдельный раздел, позволяющий легко хранить музыку и фотографии во внутренней памяти телефона, им придется делать это так, чтобы это было совместимо с существующими приложениями. Это означает использование Environment.getExternalStorageDirectory(), но поскольку Incredible также поддерживает SD-карты, вы правы в том, что не совсем понятно, как это может работать.

В группе разработчиков Android Android есть ветка , где обсуждается именно этот вопрос. Хотя пока нет ответа (на момент написания) о том, как работает Incredible, есть пост, в котором говорится, что Samsung Galaxy решает ту же проблему следующим образом:

  • Внутреннее хранилище установлено в /sdcard
  • Если также имеется SD-карта, ее можно найти по адресу /sdcard/sd

Это кажется разумным решением, поскольку оно будет совместимо с существующими приложениями, включая те, которые по ошибке жестко закодированы /sdcard вместо использования Environment.getExternalStorageDirectory().

Поэтому мой совет - использовать Environment.getExternalStorageDirectory(), когда вы ищете большие области для хранения - или SD-карту, или внутреннюю часть телефона - и надеяться, что каждый телефон выдаст что-нибудь разумное.

0 голосов
/ 08 августа 2014

Просто используйте это:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...