Android: mkdirs()/mkdir() auf externem Speicher gibt false zurück

Lesezeit: 5 Minuten

Benutzeravatar von MHM
MHM

Ich werde verrückt damit:

Log.d("STATE", Environment.getExternalStorageState());
File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "work_data");
Log.d("PATH", f.getAbsolutePath());
if (!f.exists()) {
    Log.d("MAKE DIR", f.mkdirs() + "");
}

Das Ausgabeprotokoll sieht folgendermaßen aus:

STATE     mounted
PATH      /mnt/sdcard/DCIM/work_data
MAKE DIR  false

Ich habe darauf geachtet, die richtige Berechtigung hinzuzufügen:

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

Aber ich weiß nicht, warum es den Ordner nicht erstellen konnte. habe ich auch benutzt mkdir() Schritt für Schritt, aber das Ergebnis ist das gleiche. Bitte hilf mir. Ich habe so viel gegoogelt und mindestens 2 Tage mit diesem blöden Ding verbracht. Danke für Ihre Hilfe!!

BEARBEITUNG:

Entschuldigung an alle! hatte ich hinzugefügt <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> in <application> Schild. das war mein fehler! Aber ich danke Ihnen allen für die Antwort.

  • Ihre Frage hat es mir ermöglicht, mein eigenes Problem mit mkdirs() zu lösen (mir fehlte die WRITE_EXTERNAL_STORAGE-Berechtigung). Der Grund war nicht offensichtlich, da die Ausnahme “Erlaubnis verweigert” nicht ausgelöst wurde …

    – Sebastian

    22. Januar 2012 um 10:13 Uhr

  • Ja, mit dir auf die Verrücktheit. Die Art und Weise, wie Android die einfache Aufgabe des Erstellens von Ordnern und Dateien überkompliziert hat, ist verrückt.

    – Paul McCarthy

    10. Dezember 2022 um 18:25 Uhr

Ich habe das gleiche Problem, und ich bin mir sicher, dass ich das Berechtigungs-Tag an der richtigen Stelle platziert hatte, aber mkdirs hat noch nicht funktioniert, mein System ist Android 6.0, ich löse es jetzt, Sie können es wie folgt überprüfen:

  1. Stellen Sie sicher, dass Sie das Berechtigungs-Tag einfügen.
  2. Öffnen Sie „Einstellung/Anwendung“ in Ihrem Telefon, überprüfen Sie die Berechtigung Ihrer Anwendung (ich habe festgestellt, dass die Berechtigung in meiner Manifest-Anweisung nicht hier ist), öffnen Sie den Schalter der Berechtigung so. (Ich habe festgestellt, dass sie standardmäßig geschlossen ist, wodurch „mkdirs“ erstellt wird. gescheitert)

Geben Sie hier die Bildbeschreibung ein

  • In Android 6.0 fordern Sie bestimmte Berechtigungen an, wenn Sie sie verwenden. Die Anfrage können Sie über die Funktion stellen ActivityCompat.requestPermissions. Sehen hier für mehr Informationen.

    – Chris

    27. August 2016 um 4:03 Uhr


  • In meinem Fall habe ich nach Berechtigungen im Manifest gefragt, aber irgendwie wurden sie in den App-Berechtigungen deaktiviert. Du hast mein Leben gerettet, ich liebe dich! ❤❤❤

    – claudevandort

    24. Januar 2019 um 18:55 Uhr


  • Aus irgendeinem Grund musste ich diese Berechtigung nur aus- und wieder einschalten und es funktionierte.

    – Randy

    4. September 2019 um 21:25 Uhr

Benutzeravatar von Omnivore
Omnivore

Ich hatte das gleiche Problem und habe eine Woche lang alles durchsucht, um die Antwort zu finden. Ich glaube, ich habe es gefunden, und ich denke, es ist lächerlich einfach, man muss die uses-permission-Anweisung an die richtige Stelle setzen …

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.name" 
    android:versionCode="1"
    android:versionName="0.2">

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Als ich es im Abschnitt hatte, funktionierte es nicht.

  • Richtige Antwort in meiner Situation. Stimmen Sie ab

    – Pham Hung

    22. Juni 2017 um 9:47 Uhr

  • Hat bei mir nicht funktioniert.

    – Johannes

    14. Dezember 2021 um 14:51 Uhr

Ich weiß, dass dies ein alter Beitrag ist, aber vielleicht kann meine Antwort jemandem helfen.

Nachdem ich mich mehrere Tage mit diesem Problem beschäftigt habe, habe ich festgestellt, dass die SD-Karte nicht verfügbar ist, während das Telefon mit dem PC verbunden ist, was sich während der Entwicklung immer herausstellt. Dadurch schlägt jeder Versuch fehl, ein Verzeichnis oder eine Datei darüber zu erstellen. Um es “einfacher” zu machen, schien es sich je nach getestetem Telefon unterschiedlich zu verhalten.

Ich weiß, es kann sich nach einem ziemlich dummen Problem anhören, aber es kostet viel Zeit, die vielleicht jemand anderes sparen kann.

  • vielleicht in einigen Geräten, nicht in allen

    – Hamidreza Sadegh

    9. Juli 2016 um 6:31 Uhr

  • wie teste ich dann mkdir() mit meinem angeschlossenen Telefon??

    – Khay Leng

    24. Mai 2021 um 7:54 Uhr

Benutzeravatar von Priyankchoudhary
Priyankchoudhary

Gilt nur, wenn Ihre targetSdkVersion ist 29 oder höher

Environment.getExternalStorageDirectory() ist in API-Ebene 29 veraltet.

Verwenden Sie diese Zeile, um die gleiche Funktionalität zu erhalten

File mediaStorageDir = context.getExternalFilesDir(null);

Wenn Sie alle möglichen Fehler überprüft haben, versuchen Sie es mit diesem Fix.

Bereits hier beantwortet – https://stackoverflow.com/a/61480077/7764015

füge diese Codezeile in OnCreate() hinzu

ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);

  • Ich habe die richtige Berechtigung Manifest Datei, und es funktioniert gut auf Android 7.1, aber versucht auf Android 9.0 funktioniert nicht, requestPermission hat es geschafft, thx!!

    – Sam

    16. Januar 2019 um 17:04 Uhr

  • Dies hat mein Problem mit API 26+ gelöst

    – alex_z

    23. Januar 2019 um 13:39 Uhr

Benutzeravatar von Bhavesh Moradiya
Bhavesh Moradiya

Möglicherweise ist es für eine Antwort zu spät, aber wenn Sie die R / W-Berechtigung bereits zugelassen haben (auch Laufzeitberechtigung) und immer noch nicht funktioniert, fügen Sie diese unten erwähnte Zeile in Ihre hinzu AndroidManifest.xml

<application
........
........
android:requestLegacyExternalStorage="true">

Hinweis: Dies muss erforderlich sein, wenn Sie auf Android 10+ abzielen

  • Ich habe die richtige Berechtigung Manifest Datei, und es funktioniert gut auf Android 7.1, aber versucht auf Android 9.0 funktioniert nicht, requestPermission hat es geschafft, thx!!

    – Sam

    16. Januar 2019 um 17:04 Uhr

  • Dies hat mein Problem mit API 26+ gelöst

    – alex_z

    23. Januar 2019 um 13:39 Uhr

Benutzeravatar von dragonroot
Drachenwurzel

mkdirs() gibt nur true zurück, wenn das Verzeichnis erstellt wurde. Wenn es bereits vorhanden ist, sollte es false zurückgeben. Ich würde also wetten, dass dieses Verzeichnis bereits existiert.

  • Nein, tut es nicht. Ich überprüfe es in der Zeile if (!f.exists()) {

    – MHM

    27. August 2011 um 8:13 Uhr

1438750cookie-checkAndroid: mkdirs()/mkdir() auf externem Speicher gibt false zurück

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy