2010-04-20 11 views
12

Sto cercando di trovare informazioni su come accedere a livello di codice il HTC Droid Incredible's presunto 8GB di Internal Storage Memory.programmazione accedendo memoria interna (non scheda SD) su Verizon HTC Droid Incredible (Android)

Per determinare il External Storage (SD Card) Location, sto usando il comando:

android.os.Environment.getExternalStorageDirectory(). 

non sono stato in grado di trovare qualsiasi corollario per Internal phone Storage.

Nell'esaminare HTC/Google Nexus One, Motorola Droid, e telefoni HTC Dream/G1, lì (come ci si aspetterebbe) non sembra essere qualsiasi Mount Point per tale Arbitrary Internal Storage.

Su questi telefoni il Internal Storage è suddiviso tra /data, /system e /cache partizioni.

The Incredible's Internal Storage non si troverà sicuramente nello /system. /cache è anche improbabile dato che è globalmente non leggibile/non eseguibile.

Ho letto nelle recensioni che il telefono sarà ancora limitato a 512MB o giù di lì per le app, suggerendo che non è semplicemente una sottodirectory di /data.

Non ho accesso a un'unità Droid Incredible, naturalmente.

risposta

4

Come sapete, l'accesso alla memoria interna di solito è limitato a determinate directory per ciascuna applicazione in base alle autorizzazioni. Questo per impedire a un'applicazione di leggere i dati da un altro e accedere ai file di sistema senza utilizzare le API. Questo ha senso dal momento che, ad esempio, se disponi di un'applicazione di internet banking, non vorrai che altre app possano accedere a nessuno dei suoi dati memorizzati nella cache.

Ogni applicazione consente di memorizzare i dati in una directory sotto /data/data. Tuttavia, normalmente non si specificano esplicitamente i percorsi ma si utilizzano metodi come Context.openFileOutput() che crea il file direttamente nella sottodirectory appropriata dell'applicazione.

Sono d'accordo con voi sul fatto che è improbabile che la maggior parte degli 8 GB della memoria di Incredible venga utilizzata per la partizione /data.

Quindi, se avranno una partizione separata per consentire la memorizzazione di musica e foto facilmente nella memoria interna del telefono, dovranno farlo in un modo compatibile con le applicazioni esistenti. Questo significa usare Environment.getExternalStorageDirectory() ma dal momento che Incredible supporta anche schede SD, hai ragione sul fatto che non è ovvio come possa funzionare.

There is a thread on the Android Developers Google Group discutendo questa domanda esatta.Anche se non c'è una risposta (al momento della scrittura) per come l'incredibile funziona c'è un post che dice il Samsung Galaxy risolve lo stesso problema in questo modo:

  • La memoria interna è montato /sdcard
  • Se una scheda SD è disponibile anche questo può essere trovato alla /sdcard/sd

questa sembra una soluzione ragionevole dal momento che sarà compatibile con le applicazioni esistenti, compresi quelli che hanno erroneamente hard coded /sdcard invece di utilizzare Environment.getExternalStorageDirectory().

Quindi il mio consiglio sarebbe quello di utilizzare Environment.getExternalStorageDirectory() quando si cercano aree estese per l'archiviazione (scheda SD o interna al telefono) e sperare che ogni telefono restituisca qualcosa di sensato.

8

Ulteriori informazioni: Droid Incredible storage mount points. Sembra che Droid Incredible monti la sua memoria interna su/emmc, apparentemente montata r/w. Non è ancora verificato se il permesso WRITE_EXTERNAL_STORAGE è necessaria al fine di ottenere r/w accesso - Sto cercando di ottenere queste informazioni dal Google Code

Io probabilmente risolvere questo problema, consentendo all'utente due opzioni per memorizzare il dati:

  1. SD-Card
  2. Droid Incredible sola Memoria interna

Edit: Sembra che il WRITE_EXTERNAL_STORAGE autorizzazione è sufficiente: secondo droidForums sia/sdcard e/EMMC ha lo stesso GID 1015.

Edit2: Secondo Google Group Thread rendimenti incredibili/sdcard come il valore del risultato di Environment.getExternalStorageDirectory(). Pertanto, l'utente deve decidere se desidera utilizzare/sdcard o/emmc. L'auto-rilevamento di Incredible può essere basato sull'esistenza del percorso/emmc.

+0

fai a sapere se l'Incredibile è l'unico dispositivo con storage on-board a disposizione? – Tenfour04

-1

Basta semplicemente utilizzare questo:

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) 
Problemi correlati