Программный доступ к внутреннему хранилищу (не SD-карта) на Verizon HTC Droid Incredible (Android)

Я пытаюсь найти информацию о том, как программно получить доступ к 8GB Internal Storage Memory HTC Droid Incredible's .

Чтобы определить 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 Incredible, разумеется, не будет находиться в /system . /cache также маловероятен, если он глобально не читается / не исполняется .

Я читал в обзорах, что телефон по-прежнему будет ограничен 512MB или около того для приложений, предполагая, что это не просто подкаталог /data .

Конечно, у меня нет доступа к подразделению Droid Incredible .

Solutions Collecting From Web of "Программный доступ к внутреннему хранилищу (не SD-карта) на Verizon HTC Droid Incredible (Android)"

Здесь есть дополнительная информация: Droid Incredible points mount points . Кажется, что Droid Incredible монтирует внутреннее хранилище в / emmc, предположительно смонтированное r / w. Пока еще не проверено, требуется ли разрешение WRITE_EXTERNAL_STORAGE для получения доступа к r / w – я пытаюсь получить эту информацию по адресу http: // code.google.com/p/aedict/issues/detail?id=86

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

  1. SD Card
  2. Только Droid Incredible-only Внутреннее хранилище

Изменить: кажется, что разрешения WRITE_EXTERNAL_STORAGE достаточно: согласно http://www.droidforums.net/forum/droid-incredible-hacks/50916-how-i-rooted-my-incredible-installed-busybox.html как / Sdcard и / emmc имеют тот же GID, что и 1015.

Edit2: В соответствии с http://groups.google.com/group/android-developers/browse_thread/thread/45d96f07abd83549/42d5ec430b2f7572?lnk=raot Incredible возвращает / sdcard в качестве значения результата Environment.getExternalStorageDirectory (). Поэтому пользователю необходимо решить, хочет ли он использовать / sdcard или / emmc. Автоопределение Невероятного может быть основано на существовании пути / emmc.

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

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

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

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

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

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

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

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

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

 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)