2014-10-27 9 views
5

In esecuzione su un Nexus 4, quando chiamo getExternalCacheDir().getAbsolutePath() ottengo come percorso /storage/emulated/0/Android/Data/com.example.myapp/cache. Il problema è che, come indicato in diversi punti, /storage/emulated/0 genera un errore "nessun file o directory"./storage/emulato/0 ottenuto da getExternalCacheDir() genera l'errore "nessun file o directory"

Quello che mi aspetto di ottenere è qualcosa come /storage/emulated/legacy, poiché ottengo correttamente la query sulla variabile di ambiente EXTERNAL_STORAGE con comandi come System.getenv("EXTERNAL_STORAGE").

mi basta usare un if per controllare e correggere il percorso nel caso si punterà a qualcosa di diverso da quello che ottengo con getenv, ma voglio capire perché getExternalCacheDir() restituisce un percorso non valido, o se tale funzione è stata in qualche modo deprecato.

Note aggiuntive: Su Xperia U in esecuzione CM11 funziona correttamente; destinati a Nexus 4 con adb ottengo

ls /storage/emulated/0 
/storage/emulated/0: No such file or directory 

Sono autorizzazioni di accesso appropriate, dal momento che se io chiamo, per esempio, echo "hi!" >> /storage/emulated/legacy/Android/Data/com.example.myapp/cache non ho indizi, mentre chiama echo "hi!" >> /storage/emulated/0/Android/Data/com.example.myapp/cache risultati in errori. Quest'ultimo è quello che ottengo da getExternalCacheDir.


Sono interessato a utilizzare quel percorso con i comandi della shell, non solo con le funzioni dell'API di Android.

risposta

0

getExternalCacheDir fornisce un percorso valido.
È possibile leggere/scrivere su di esso dato che la memoria esterna è montata correttamente e si dispone delle autorizzazioni di accesso appropriate.

Cioè:

if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) // mounted 
    && context.checkCallingOrSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") == PackageManager.PERMISSION_GRANTED) { // have permissions 

    File myTempDir = new File(getExternalCacheDir(), "tempDir"); 
    myTempDir.mkdirs(); 

    // create and write to files 
} 

Speranza che aiuta.

+1

Sì, hai ragione, se usato con 'nuovo file (getExternalCacheDir()," tempDir ");' funziona come un fascino! Il problema è che ho bisogno di usare il percorso con un comando di shell (es. 'Ls'), quindi ho bisogno di ottenere un absolutePath che è considerato valido dal sistema operativo e non solo dall'API di Android – kalup

+0

Si prega di assicurarsi che entrambi 2 condizioni dichiarate nella risposta: 'MEDIA_MOUNTED.equals (Environment.getExternalStorageState()' e 'context.checkCallingOrSelfPermission (" android.permission.WRITE_EXTERNAL_STORAGE ") == PackageManager.PERMISSION_GRANTED' sono entrambi veri per il tuo caso con' .../emulated/0/... 'percorso – kiruwka