Acceso mediante programación al almacenamiento interno (no tarjeta SD) en Verizon HTC Droid Incredible (Android)

Estoy tratando de encontrar información sobre cómo acceder mediante programación a la supuesta 8GB de Internal Storage Memory del HTC Droid Incredible's .

Para determinar la External Storage (SD Card) Location , estoy usando el comando:

 android.os.Environment.getExternalStorageDirectory(). 

No he podido encontrar ningún corolario para Internal phone Storage .

Al examinar los teléfonos HTC / Google Nexus One , Motorola Droid y HTC Dream / G1 , allí (como era de esperarse) no parece ser ningún Mount Point para dicho Arbitrary Internal Storage .

En estos teléfonos, el Internal Storage se divide entre particiones /data , /system y /cache .

El Internal Storage del Incredible no va a ser localizado en /system . /cache también es improbable dado que es globalmente no legible / no ejecutable .

Había leído en comentarios que el teléfono todavía se limitará a 512MB o menos para las aplicaciones, lo que sugiere que no es simplemente un subdirectorio de /data .

Por supuesto, no tengo acceso a una unidad de Droid Incredible .

Hay más información aquí: Droid Incredible almacenamiento puntos de montaje . Parece que Droid Incredible monta su almacenamiento interno en / emmc, supuestamente montado r / w. Aún no se ha verificado si el permiso WRITE_EXTERNAL_STORAGE es necesario para obtener acceso r / w. Estoy tratando de obtener esta información en http: // code.google.com/p/aedict/issues/detail?id=86

Probablemente resolveré esto permitiendo al usuario dos opciones para almacenar los datos:

  1. Tarjeta SD
  2. Droid Incredible-only Almacenamiento interno

Edit: Parece que el permiso WRITE_EXTERNAL_STORAGE es suficiente: de acuerdo con http://www.droidforums.net/forum/droid-incredible-hacks/50916-how-i-rooted-my-incredible-installed-busybox.html ambos / Sdcard y / emmc tiene el mismo GID de 1015.

Edit2: De acuerdo con http://groups.google.com/group/android-developers/browse_thread/thread/45d96f07abd83549/42d5ec430b2f7572?lnk=raot el Incredible devuelve / sdcard como el valor de resultado de Environment.getExternalStorageDirectory (). Por lo tanto, el usuario debe decidir si quiere usar / sdcard o / emmc. La autodetección de Incredible puede basarse en la existencia de la ruta / emmc.

Como usted sabe, el acceso al almacenamiento interno suele limitarse a determinados directorios para cada aplicación mediante permisos. Esto es para detener una aplicación de lectura de datos de otro y de acceder a archivos del sistema sin utilizar las API. Esto tiene sentido ya que, por ejemplo, si tiene una aplicación de banca por Internet, no desea que otras aplicaciones puedan acceder a cualquiera de sus datos almacenados en caché.

Cada aplicación obtiene almacenar datos en un directorio bajo /data/data . Sin embargo, normalmente no se especifican los caminos explícitamente pero se utilizan métodos como Context.openFileOutput() que crea el archivo en el subdirectorio adecuado de su aplicación directamente.

Estoy de acuerdo con usted en que es improbable que la mayoría de los 8 GB del almacenamiento de Incredible se utilicen para la partición /data .

Así que si van a tener una partición separada para permitir que la música y las fotos se almacenen fácilmente en el almacenamiento interno del teléfono, entonces tendrán que hacerlo de una manera que sea compatible con las aplicaciones existentes. Esto significa usar Environment.getExternalStorageDirectory() pero como el Incredible también admite tarjetas SD, tiene razón en que no es obvio cómo podría funcionar.

Hay un hilo en el Grupo de desarrolladores de Android de Google que discute esta pregunta exacta. Mientras que no hay una respuesta (en el momento de escribir) para saber cómo funciona el Increíble hay un post que dice que el Samsung Galaxy resuelve el mismo problema de esta manera:

  • El almacenamiento interno se monta en /sdcard
  • Si también hay una tarjeta SD disponible, puede encontrarla en /sdcard/sd

Esto parece una solución razonable, ya que será compatible con las aplicaciones existentes, incluyendo aquellas que han codificado /sdcard error /sdcard lugar de usar Environment.getExternalStorageDirectory() .

Así que mi consejo sería utilizar Environment.getExternalStorageDirectory() cuando buscas grandes áreas de almacenamiento – ya sea tarjeta SD o interna para el teléfono – y espero que cada teléfono devuelve algo sensible.

Simplemente utilice esto:

 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) 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.