Heim >Java >javaLernprogramm >Warum kann ich in Android 10 trotz der erforderlichen Berechtigungen kein Verzeichnis erstellen?

Warum kann ich in Android 10 trotz der erforderlichen Berechtigungen kein Verzeichnis erstellen?

Susan Sarandon
Susan SarandonOriginal
2024-12-14 19:04:13443Durchsuche

Why Can't I Create a Directory in Android 10, Even with Necessary Permissions?

Ich kann in Android 10 kein Verzeichnis erstellen. Es funktioniert auf Geräten bis Android Oreo. Ich habe zwei Möglichkeiten zum Erstellen ausprobiert Ordner.

Using
    File.mkdir():
  • Hier ist die Variable success immer
false
File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pastebin");
if (!f.isFile()) {
    if (!(f.isDirectory())) {
        success =  f.mkdir();
    }
}
was bedeutet, dass das Verzeichnis nicht vorhanden ist erstellt.

Mit
    Files.createDirectory():
  • was diese Ausnahme verursacht:
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();
        }
    }
}

Ich habe die Laufzeitberechtigungen implementiert und

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)
`

`

sind alle eingestellt.

Antwort:

Wie erstmals im März 2019 bekannt gegeben wurde, können Sie unter Android 10 Location standardmäßig nicht mehr auf externe Speicher oder Wechselspeicher zugreifen. Dazu gehören Environment.getExternalStorageDirectory() und andere Methoden für Environment (z. B. getExternalStoragePublicDirectory()).

Für Android 10 und 11 können Sie android:requestLegacyExternalStorage="true" zum -Element hinzufügen. Dadurch können Sie den herkömmlichen Speichermodus wählen und Ihr vorhandener externer Speichercode funktioniert ebenfalls.

Ansonsten haben Sie folgende Möglichkeiten:

Verwenden Sie Methoden im Kontext (z. B. getExternalFilesDir()), um auf Verzeichnisse im externen Speicher zuzugreifen, in die Ihre App schreiben kann. Sie benötigen keine Berechtigungen, um diese Verzeichnisse unter Android 4.4 zu verwenden. Bei der Deinstallation Ihrer App werden die hier gespeicherten Daten jedoch gelöscht.

    Verwenden Sie Speicherzugriffs-Frameworks (wie ACTION_OPEN_DOCUMENT und ACTION_CREATE_DOCUMENT).
  • Wenn es sich bei Ihrem Inhalt um Medien handelt, können Sie MediaStore verwenden, um die Medien an Standard-Medienspeicherorten zu platzieren.

Das obige ist der detaillierte Inhalt vonWarum kann ich in Android 10 trotz der erforderlichen Berechtigungen kein Verzeichnis erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn