Verzeichnis kann in Android 10 nicht erstellt werden

Lesezeit: 7 Minuten

Ich kann kein Verzeichnis in Android 10 erstellen. Es funktioniert auf Geräten bis Android Oreo.

Ich habe zwei Möglichkeiten zum Erstellen von Ordnern ausprobiert.

Verwenden File.mkdir():

   File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pastebin");
                    if (!f.isFile()) {
                        if (!(f.isDirectory())) {
                               success =  f.mkdir();
                        }

Hier die Variable success ist immer falsch was bedeutet, dass das Verzeichnis nicht erstellt wird.

Verwenden Files.createDirectory():

   File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pastebin");
                    if (!f.isFile()) {
                        if (!(f.isDirectory())) {
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                                try {
                                    Files.createDirectory(Paths.get(f.getAbsolutePath()));
                                } catch (IOException e) {
                                    e.printStackTrace();
                                    Toast.makeText(getApplicationContext(), R.string.unable_to_download, Toast.LENGTH_LONG).show();
                                }
                            } else {
                                f.mkdir();
                            }
                        }

was diese Ausnahme verursacht:

pzy64.pastebinpro W/System.err: java.nio.file.AccessDeniedException: /storage/emulated/0/Pastebin
pzy64.pastebinpro W/System.err:     at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:391)
pzy64.pastebinpro W/System.err:     at java.nio.file.Files.createDirectory(Files.java:674)

Ich habe die Laufzeitberechtigungen implementiert und

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

sind alle eingestellt.

Verzeichnis kann in Android 10 nicht erstellt werden
CommonsWare

Wie bereits im März 2019 erstmals bekannt gegeben wurde, haben Sie standardmäßig keinen Zugriff mehr auf beliebige Standorte externer Speicher oder Wechselspeicher auf Android 10+. Das beinhaltet Environment.getExternalStorageDirectory() und andere Methoden auf Environment (z.B, getExternalStoragePublicDirectory().

Für Android 10 und 11 können Sie hinzufügen android:requestLegacyExternalStorage="true" zu deinem <application> Element im Manifest. Dadurch entscheiden Sie sich für das Legacy-Speichermodell und Ihr vorhandener externer Speichercode funktioniert.

Ansonsten haben Sie folgende Möglichkeiten:

  • Verwenden Sie Methoden auf Contextwie zum Beispiel getExternalFilesDir(), um zu Verzeichnissen auf externen Speichermedien zu gelangen, in die Ihre App schreiben kann. Sie benötigen keine Berechtigungen, um diese Verzeichnisse unter Android 4.4+ zu verwenden. Die Daten, die Sie dort speichern, werden jedoch entfernt, wenn Ihre App deinstalliert wird.

  • Verwenden Sie das Storage Access Framework, wie z ACTION_OPEN_DOCUMENT und ACTION_CREATE_DOCUMENT.

  • Wenn es sich bei Ihren Inhalten um Medien handelt, können Sie verwenden MediaStore um die Medien an standardmäßigen Medienpositionen zu platzieren.

  • Wollen Sie sagen, dass es keine Möglichkeit gibt, ein eigenes Verzeichnis auf Android Q zu erstellen?

    – Xihuny

    24. Oktober 2019 um 21:30 Uhr

  • @Xihuny: Sie können gerne Unterverzeichnisse von erstellen getExternalFilesDir() und ähnliche Standorte beliefert von Context. Sie können mit Dateisystem-APIs keine Unterverzeichnisse aus den Roots von externen oder Wechselspeichern direkt erstellen.

    – CommonsWare

    24. Oktober 2019 um 22:54 Uhr

  • Ich möchte das nicht tun, da die Dateien entfernt werden, wenn der Benutzer die App deinstalliert.

    – Xihuny

    25. Oktober 2019 um 9:17 Uhr

  • @Xihuny: Verwenden Sie dann das Storage Access Framework und lassen Sie den Benutzer wählen, wo auf dem Gerät des Benutzers Sie den Inhalt des Benutzers ablegen.

    – CommonsWare

    25. Oktober 2019 um 10:51 Uhr

  • @Xihuny: Sie können verwenden ACTION_OPEN_DOCUMENT_TREE um dem Benutzer zu ermöglichen, einen Dokumentbaum auszuwählen. Von dort verwenden DocumentFile.fromTreeUri() ein bekommen DocumentFile für diesen Dokumentenbaum. Sie können dann in diesem Baum untergeordnete Elemente (Dokumente und Bäume) mit beliebigen Namen erstellen. Ob es sich um ein “Verzeichnis” handelt, hängt davon ab, was der Benutzer als Basisdokumentbaum auswählt – es ist nicht erforderlich, dass er etwas im Dateisystem auswählt.

    – CommonsWare

    25. Oktober 2019 um 14:55 Uhr

Verzeichnis kann in Android 10 nicht erstellt werden
Sujit Jamdade

Für Android 10 können Sie hinzufügen

android:requestLegacyExternalStorage="true"

zu deinem Element im Manifest. Dadurch entscheiden Sie sich für das Legacy-Speichermodell und Ihr vorhandener externer Speichercode funktioniert. Dieser Fix funktioniert jedoch nicht auf Android R und höher, daher ist dies nur ein kurzfristiger Fix.

  • es sei denn, Ihr targetSDK >= 30 funktioniert immer noch in Android 11 und höher.

    – tahsinRupam

    9. November 2020 um 11:00 Uhr


  • Was ist die langfristige Lösung für Android 11?

    – Liebe leben

    18. Februar 2021 um 0:49 Uhr

1646263032 968 Verzeichnis kann in Android 10 nicht erstellt werden
Wowo Ot

In Android gibt es weitere Einschränkungen API 30

Sie können nur in Ihre schreiben app-specific files

 File dir_ = new File(context.getFilesDir(), "YOUR_DIR");
 dir_.mkdirs();

oder im externen Speicher Ihrer App Android/data

File dir_ = new File(myContext.getExternalFilesDir("FolderName"),"YOUR_DIR");

AKTUALISIEREN

Diese Antwort bot eine andere Lösung https://stackoverflow.com/a/65744517/8195076

AKTUALISIEREN

Eine andere Möglichkeit besteht darin, diese Berechtigung zu erteilen manifest

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

wie diese Antwort https://stackoverflow.com/a/66968986/8195076

  • Woow, das hat bei mir funktioniert, denken Sie daran, android:requestLegacyExternalStorage=”true” in Ihrem Manifest festzulegen

    – Daniel Nyamasyo

    9. Juli 2021 um 2:28 Uhr

1646263032 999 Verzeichnis kann in Android 10 nicht erstellt werden
Amit_android

Seit Q Beta 4 ist es möglich, diese Funktion wie folgt zu deaktivieren:

Targeting von API 28 (oder niedriger) mit dem Manifestattribut requestLegacyExternalStorage:

<manifest ... >
  <!-- This attribute is "false" by default on apps targeting Android Q. -->
  <application android:requestLegacyExternalStorage="true" ... >
    ...
  </application>
</manifest>

1646263033 623 Verzeichnis kann in Android 10 nicht erstellt werden
JP711

Dies funktioniert für mich und ich denke, es funktioniert unter Android 10>

ContentResolver resolver = getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + "/Folder Example");
String path = String.valueOf(resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues));
File folder = new File(path);
boolean isCreada = folder.exists();
if(!isCreada) {
    folder.mkdirs();
}

  • Sie fragen a Filealso müssen Sie hinzufügen android:requestLegacyExternalStorage="true" bei der Ausrichtung auf Android 10>. In diesem Fall können Sie es genauso gut weiter verwenden getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).

    – HB.

    9. Mai 2020 um 10:15 Uhr

  • getExternalStoragePublicDirectory ist in API-Ebene 29 veraltet

    – JP711

    9. Mai 2020 um 15:44 Uhr

  • Ja und? Wie es in der Dokumentation heißt When an app targets Build.VERSION_CODES.Q, the path returned from this method is no longer directly accessiblealso wenn du hast android:requestLegacyExternalStorage="true" in Ihrem Manifest können Sie es immer noch verwenden.

    – HB.

    9. Mai 2020 um 15:52 Uhr

  • Erstens war ich es nicht, der abgelehnt hat. Um Ihre Frage zu beantworten, fragen Sie eine Datei ab, die auf Android 10> nicht zulässig ist, es sei denn, Sie fordern Legacy-Speicher an. Um es richtig zu machen, sollten Sie die bekommen Uriso was Uri mUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); dann benutze das Uri direkt statt an a weiterzugeben File Objekt.

    – HB.

    9. Mai 2020 um 16:37 Uhr

  • Sie müssen keinen Ordner erstellen. Wenn Sie an die schreiben Uri Der Ordner wird automatisch erstellt.

    – HB.

    9. Mai 2020 um 17:12 Uhr

1646263033 989 Verzeichnis kann in Android 10 nicht erstellt werden
Gas

Sie können das öffentliche Verzeichnis verwenden, um Dateien in Android 11 wie folgt zu speichern:

dir = new File(Environment.getExternalStoragePublicDirectory(DIRECTORY_DOCUMENTS).getPath()
    + "/foldername");

if (!dir.exists()) {
     dir.mkdir();
     Toast.makeText(getApplicationContext(), "not exist", Toast.LENGTH_SHORT).show();
}

  • Sie fragen a Filealso müssen Sie hinzufügen android:requestLegacyExternalStorage="true" bei der Ausrichtung auf Android 10>. In diesem Fall können Sie es genauso gut weiter verwenden getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).

    – HB.

    9. Mai 2020 um 10:15 Uhr

  • getExternalStoragePublicDirectory ist in API-Ebene 29 veraltet

    – JP711

    9. Mai 2020 um 15:44 Uhr

  • Ja und? Wie es in der Dokumentation heißt When an app targets Build.VERSION_CODES.Q, the path returned from this method is no longer directly accessiblealso wenn du hast android:requestLegacyExternalStorage="true" in Ihrem Manifest können Sie es immer noch verwenden.

    – HB.

    9. Mai 2020 um 15:52 Uhr

  • Erstens war ich es nicht, der abgelehnt hat. Um Ihre Frage zu beantworten, fragen Sie eine Datei ab, die auf Android 10> nicht zulässig ist, es sei denn, Sie fordern Legacy-Speicher an. Um es richtig zu machen, sollten Sie die bekommen Uriso was Uri mUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); dann benutze das Uri direkt statt an a weiterzugeben File Objekt.

    – HB.

    9. Mai 2020 um 16:37 Uhr

  • Sie müssen keinen Ordner erstellen. Wenn Sie an die schreiben Uri Der Ordner wird automatisch erstellt.

    – HB.

    9. Mai 2020 um 17:12 Uhr

1646263034 121 Verzeichnis kann in Android 10 nicht erstellt werden
David Buck

benutz nur

android:requestLegacyExternalStorage="true"

in Manifesten

  • Dies gilt nur für die Android-Version < Android 11. Gilt nicht für die Android-Version größer als 10.

    – Benutzer6159419

    19. Oktober 2020 um 12:33 Uhr

  • @user6159419 Ja und auf Android 11>, File Pfadzugriff ist wieder erlaubt. Damit, android:requestLegacyExternalStorage="true" soll sicherstellen, dass es auf Android 10 funktioniert.

    – HB.

    10. Januar 2021 um 9:10 Uhr

917150cookie-checkVerzeichnis kann in Android 10 nicht erstellt werden

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

Privacy policy