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
Libérer: 2024-12-14 19:04:13
original
440 Les gens l'ont consulté

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();
    }
}
Copier après la connexion
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();
        }
    }
}
Copier après la connexion

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)
Copier après la connexion
`

`

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal