2014-11-27 9 views
5

Questo è il mio codicePerché non posso creare una directory all'interno di Environment.DIRECTORY_PICTURES?

File selfieLocation = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), 
       "Daily Selfies"); 
boolean isDirectory = false; 
if(!selfieLocation.isDirectory()) { 
     //Creates directory named by this file 
     selfieLocation.mkdir(); 
     isDirectory = selfieLocation.isDirectory(); 
} 
//array of strings 
for(String selfiePath: selfieLocation.list()) { 
     selfies.add(selfiePath); 
} 

Fondamentalmente quello che sto cercando di fare è creare il mio elenco personalizzabile all'interno della directory standard in cui inserire immagini che sono disponibili per l'utente.

Ho visto i thread correlati e ho visto questo, Android: unable to create a directory in default pictures folder. Tuttavia mi sono assicurato di avere una chiamata a getExternal ...., e non solo di avere Environment.DIRECTORY_PICTURES come parametro. Ho anche guardato qui http://developer.android.com/guide/topics/data/data-storage.html#filesExternal e ho visto che avevo il metodo giusto chiamata/formato per creare una cartella personalizzabile nella memoria esterna. L'esempio docs era

File file = new File(Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_PICTURES), albumName); 
if (!file.mkdirs()) { 
    Log.e(LOG_TAG, "Directory not created"); 
} 

ho fatto un passo attraverso il mio codice e ho visto che la variabile locale isDirectory soggiornato presso false anche dopo la chiamata a selfieLocation.mkdir(). Qualcuno sa perché questa directory non può essere creata?

risposta

4

Provare a creare la directory con File#mkdirs(), non File#mkdir(). Quest'ultimo presuppone che tutte le directory madri siano già presenti, quindi non creerà la directory se uno dei suoi genitori non esiste.
Inoltre, dare un'occhiata alle autorizzazioni in AndroidManifest.xml. È necessario le seguenti autorizzazioni per leggere/scrivere il contenuto di archiviazione esterna:

<manifest ...> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    ... 
</manifest> 

android.permission.READ_EXTERNAL_STORAGE non è richiesta per ora, ma it will be nelle future versioni di Android.

+0

l'autorizzazione non è il problema perché l'ho ricevuta e non ho ricevuto un'eccezione di sicurezza. anche gli mkdir non hanno funzionato. In questo caso, il genitore esiste (getExternalFilesDir (Environment.DIRECTORY_PICTURES) – committedandroider

+0

A proposito, puoi dare una risposta a questa domanda se pensi che sia una buona domanda? Sono a rischio di una domanda ban, quindi cerco di assicurarmi che Ho fatto buone domande con la ricerca d'ora in poi. – committedandroider

+0

Ho provato a riprodurre il tuo errore e tutto funziona perfettamente sull'emulatore Il problema deve essere da qualche altra parte Io do un upvote ogni volta che vedo una domanda che potrebbe essere interessante Questa è una buona domanda, con uno sforzo di ricerca, ma non è interessante dal mio punto di vista: – aga