Maison >Java >javaDidacticiel >Pourquoi ne puis-je pas créer un répertoire dans Android 10, même avec les autorisations nécessaires ?

Pourquoi ne puis-je pas créer un répertoire dans Android 10, même avec les autorisations nécessaires ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-14 19:04:13441parcourir

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

Je ne parviens pas à créer un répertoire sous Android 10. Cela fonctionne sur les appareils jusqu'à Android Oreo. J'ai essayé deux façons de créer. dossiers.

Utilisation
    File.mkdir() :
  • Ici, la variable succès est toujours
faux
File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pastebin");
if (!f.isFile()) {
    if (!(f.isDirectory())) {
        success =  f.mkdir();
    }
}
ce qui signifie que le répertoire n'est pas créé.

Utilisation
    Files.createDirectory() :
  • ce qui provoque cette exception :
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();
        }
    }
}

J'ai implémenté les autorisations d'exécution et

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

`

sont tous set.

Réponse :

Comme révélé pour la première fois en mars 2019, vous ne pouvez plus accéder à aucun stockage externe ou stockage amovible par défaut sur Android 10 Location. Cela inclut Environment.getExternalStorageDirectory() et d'autres méthodes sur Environment (par exemple, getExternalStoragePublicDirectory()).

Pour Android 10 et 11, vous pouvez ajouter android:requestLegacyExternalStorage="true" à l'élément Cela vous permettra de choisir le mode de stockage traditionnel et votre code de stockage externe existant fonctionnera également.

Sinon, vos options sont :

Utilisez des méthodes sur le contexte (telles que getExternalFilesDir()) pour accéder aux répertoires du stockage externe sur lesquels votre application peut écrire. Vous n'avez besoin d'aucune autorisation pour utiliser ces répertoires sur Android 4.4. Cependant, lorsque votre application est désinstallée, les données stockées ici seront supprimées.

    Utilisez des frameworks d'accès au stockage (tels que ACTION_OPEN_DOCUMENT et ACTION_CREATE_DOCUMENT).
  • Si votre contenu est un média, vous pouvez utiliser MediaStore pour placer le média dans des emplacements multimédias standard.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn