2014-11-27 8 views
5

mein CodeWarum kann ich kein Verzeichnis in Environment.DIRECTORY_PICTURES erstellen? Dies ist

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); 
} 

Im Grunde, was ich versuche, mein eigenes anpassbare Verzeichnis innerhalb des Standard-Verzeichnisses, in dem zu tun ist, erstellen Bilder zu platzieren, die den Benutzer zur Verfügung stehen.

Ich sah verwandte Themen und sah diese, Android: unable to create a directory in default pictures folder. Ich stellte jedoch sicher, dass ich einen Aufruf hatte, umExternal zu erhalten .... und nicht nur Environment.DIRECTORY_PICTURES als Parameter. Ich schaute auch hier http://developer.android.com/guide/topics/data/data-storage.html#filesExternal und sah, dass ich die richtige Methode Aufruf/Format hatte, um einen anpassbaren Ordner im externen Speicher zu erstellen. Das docs Beispiel war

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

ich durch meinen Code trat und sah, dass die lokale Variable isDirectory bei falsch blieb auch nach dem Aufruf von selfieLocation.mkdir(). Weiß jemand, warum dieses Verzeichnis nicht erstellt werden kann?

Antwort

4

Versuchen Sie, Verzeichnis mit File#mkdirs(), nicht File#mkdir() zu erstellen. Letzteres geht davon aus, dass alle übergeordneten Verzeichnisse bereits vorhanden sind, sodass kein Verzeichnis erstellt wird, wenn keine der übergeordneten Verzeichnisse vorhanden sind.
Werfen Sie auch einen Blick auf Ihre Berechtigungen in AndroidManifest.xml. Sie benötigen die folgenden Berechtigungen, um den Inhalt externer Speicher zu lesen/schreiben:

<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 ist nicht erforderlich, für jetzt, aber it will be in den zukünftigen Versionen von Android.

+0

die Erlaubnis ist nicht das Problem, weil ich das habe und keine Sicherheitsausnahme bekommen. mkdirs hat auch nicht funktioniert. Der Elternteil existiert in diesem Fall (getExternalFilesDir (Environment.DIRECTORY_PICTURES) – committedandroider

+0

Übrigens, kannst du diese Frage nach oben stellen, wenn du denkst, dass es eine gute Frage ist? Ich bin in Gefahr, eine Frage zu verbieten, also versuche ich das sicherzustellen Ich stelle ab jetzt gute Fragen mit der Forschung. – committedandroider

+0

Ich habe versucht, Ihren Fehler zu reproduzieren und alles funktioniert gut auf dem Emulator. Das Problem muss woanders sein. Ich gebe eine upvote, wenn ich eine Frage sehe, die interessant sein könnte Das ist eine gute Frage, mit Forschungsaufwand, aber es ist aus meiner Sicht nicht interessant. – aga