Ich habe ein kleines Problem beim Erstellen eines Verzeichnisses und beim Speichern einer Datei in meiner Android-Anwendung. Ich benutze diesen Code, um dies zu tun:
String filename = "MyApp/MediaTag/MediaTag-"+objectId+".png";
File file = new File(Environment.getExternalStorageDirectory(), filename);
FileOutputStream fos;
fos = new FileOutputStream(file);
fos.write(mediaTagBuffer);
fos.flush();
fos.close();
Aber es wirft eine Ausnahme:
java.io.FileNotFoundException: /mnt/sdcard/MyApp/MediaCard/MediaCard-0.png (Keine solche Datei oder kein solches Verzeichnis)
in dieser Zeile: fos = new FileOutputStream(file);
Wenn ich den Dateinamen auf: setze "MyApp/MediaTag-"+objectId+"
, funktioniert er, aber wenn ich versuche, die Datei zu erstellen und in einem anderen Verzeichnis zu speichern, wird die Ausnahme ausgelöst. Also irgendwelche Ideen, was ich falsch mache?
Und noch eine Frage: Gibt es eine Möglichkeit, meine Dateien im externen Speicher privat zu machen, sodass der Benutzer sie nicht in der Galerie sehen kann, nur wenn er sein Gerät als verbindet Disk Drive
?
Environment.getExternalStorageDirectory()
anstelle von verwenden/sdcard
.finally
und fangen Sie nicht generischException
Intent.ACTION_MEDIA_MOUNTED
und funktioniert nicht mit KitKat. Die richtige Absicht zu senden istnew Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file) )
Der von RajaReddy präsentierte Code funktioniert nicht mehr für KitKat
Dieser macht (2 Änderungen):
quelle
Update 2018, SDK> = 23.
Jetzt sollten Sie auch überprüfen, ob der Benutzer die Berechtigung für externen Speicher erteilt hat, indem Sie Folgendes verwenden:
und natürlich hinzufügen in
AndroidManifest.xml
:quelle
Sie benötigen hierfür eine Erlaubnis
und Methode:
quelle
Stellen Sie sicher, dass Ihre App über die erforderlichen Berechtigungen zum Schreiben in externen Speicher verfügt: http://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE
In Ihrer Manifestdatei sollte es ungefähr so aussehen:
quelle
Versuche dies :
quelle
Ich habe eine AsyncTask zum Speichern von Bitmaps erstellt.
quelle
Wahrscheinlich wird eine Ausnahme ausgelöst, da kein
MediaCard
Unterverzeichnis vorhanden ist. Sie sollten überprüfen, ob alle Verzeichnisse im Pfad vorhanden sind.Informationen zur Sichtbarkeit Ihrer Dateien: Wenn Sie eine Datei mit dem Namen
.nomedia
in Ihr Verzeichnis einfügen, teilen Sie Android mit, dass sie nicht nach Mediendateien durchsucht werden soll und diese nicht in der Galerie angezeigt werden.quelle
seit android 4.4 dateispeicherung wurde geändert. es gibt
Es wird ein Array neu abgestimmt.
wenn der Name null ist
Der erste Wert lautet /storage/emulated/0/Android/com.my.package/files
Der zweite Wert lautet /storage/extSdCard/Android/com.my.package/files
Android 4.3 und weniger werden ein einzelnes Elementarray neu abgestimmt
Teile von wenig chaotischem Code, aber es zeigt, wie es funktioniert:
quelle
Dieser Code funktioniert hervorragend und funktioniert auch mit KitKat. Schätzen Sie @RajaReddy PolamReddy Hier wurden
einige weitere Schritte hinzugefügt und auch in der Galerie sichtbar.
Dies ist der Medienscanner, der in der Galerie sichtbar ist.
quelle
Für API-Level 23 (Marshmallow) und höher sollte zusätzlich zu den Verwendungsberechtigungen im Manifest auch eine Popup-Berechtigung implementiert werden, die der Benutzer während der Verwendung der App zur Laufzeit erteilen muss.
Unten finden Sie ein Beispiel zum Speichern
hello world!
alsmyFile.txt
Dateiinhalt imTest
Verzeichnis im Bildverzeichnis.Im Manifest:
Wo möchten Sie die Datei erstellen:
quelle
Klicken Sie hier für eine vollständige Beschreibung und einen Quellcode
quelle