2017-05-05 3 views
0

Ich möchte den Benutzern meiner Anwendung die Wahl geben, auf dem internen Telefonspeicher oder auf einer SD-Karte zu speichern. Wenn ich ein File aus der Wahl des Benutzers zu erstellen, ist die URI (ohne die Dateinamen) so etwas wie:Schreiben auf SD-Karte Android

Intern: Inhalt: /com.android.externalstorage.documents/tree/primary%3A

SD: Inhalt: /com.android.externalstorage.documents/tree/760E-F734%3A

Allerdings, wenn ich versuche, eine Datei auf diese Verzeichnisse mit dem folgenden Code zu schreiben, erhalte ich die Fehler java.io.IOException: No such file or directory:

File writePath = new File("content:/com.android.externalstorage.documents/tree/primary%3A") 

File file = new File(writePath, fileName); 

try { 
    file.createNewFile(); 
} catch (IOException e) { 
    Log.e("saveSurvey", "Failed to create file!" + e.getMessage()); 
    return false; 
} 

Also würde die Datei irgendwo geschrieben werden dies wie:

Inhalt: /com.android.externalstorage.documents/tree/primary%3A/ [mein Dateiname]

ich die WRITE_EXTERNAL_STORAGE Erlaubnis im Manifest erklärt habe, also denke ich, ist es nicht ein Berechtigungen Problem aber mehr von einem ungültigen Pfad Problem.

Wenn dies keine gültigen Dateipfade sind, wie würde ich dann auf die SD-Karte schreiben? Die Verwendung von Environment.getExternalStorageDirectory() schreibt immer in den internen Speicher meines Gerätes ('/ storage/emulated/0').

+0

Sie mischen zwei Konzepte beim Erstellen der Datei, die Sie senden eine 'content' URI während beantragen müssen es erwartet einen 'Datei'-URI, weitere Informationen unter https://developer.android.com/reference/java/io/File.html Der von' Environment.getExternalStorageDirectory() 'zurückgegebene Pfad ist korrekt, der AVD emuliert normalerweise einen externen Speicher in diesem Pfad, und nicht verwechseln SD-Karte mit externem Speicher kann es eine andere Quelle sein, weitere Informationen in https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory() –

+0

@ AlbertoMéndez Danke für die Info. Ich verstehe, dass der "externe" Speicher entweder die SD-Karte oder der Speicher des einbaubaren Geräts sein kann, aber wie schreibe ich auf die SD-Karte im Gegensatz zum Gerätespeicher? – petehallw

Antwort

0

Bitte überprüfen Sie Ihren Dateipfad. Call a getAbsolutePath() Funktion und geprüft writePath

File writePath = new File("content:/com.android.externalstorage.documents/tree/primary%3A") 
if(writePath.exists() && writePath.isDirectory()) { 
    //File extensions can be declared 
     File file = new File(writePath.getAbsolutePath(), fileName+ extensions); 
} 
+0

Das ist der größte Unsinn, den ich heute sah. – greenapps

+0

@greenapps was bedeutet das? – redAllocator

+0

Dass du einen Preis gewonnen hast ;-). – greenapps

0

Sie diesen Fehler, da der Pfad in verschiedenen Geräten unterschiedlich ist.

Try Environment.getExternalStorageDirectory() als writePath

Denken Sie daran, in Android 6 zu verwenden, und vor Ihnen die Erlaubnis zur Laufzeit

+0

Aber wie ich in meinem Beitrag erwähnte, schreibt dies immer auf den internen Speicher des Geräts und nicht die SD-Karte. – petehallw