Подтвердить что ты не робот

Программный доступ к внутреннему хранилищу (не SD-карта) на Verizon HTC Droid Incredible (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, конечно.

4b9b3361

Ответ 1

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

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

  • SD-карты
  • Droid Incredible-only Внутреннее хранилище

Изменить: кажется, что разрешения WRITE_EXTERNAL_STORAGE достаточно: согласно droidForums both/sdcard и /emmc имеет тот же GID, что и 1015.

Edit2: В соответствии с Group Group Thread Incredible возвращает /sdcard в качестве значения результата Environment.getExternalStorageDirectory(). Поэтому пользователь должен решить, хочет ли он использовать /sdcard или/emmc. Автоматическое обнаружение Incredible может основываться на существовании пути/emmc.

Ответ 2

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

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

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

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

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

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

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

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

Ответ 3

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

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)