Maison > Java > javaDidacticiel > le corps du texte

Comment résoudre les problèmes de création de répertoire dans Android Marshmallow et au-delà

Linda Hamilton
Libérer: 2024-10-24 03:25:31
original
337 Les gens l'ont consulté

How to Resolve Directory Creation Issues in Android Marshmallow and Beyond

Problèmes de création de répertoire dans Android Marshmallow et au-delà

Android Marshmallow a introduit des changements substantiels dans la façon dont les applications interagissent avec le système de fichiers, provoquant des problèmes avec création de répertoires pour certaines applications natives. Lorsqu'ils tentent de créer un répertoire dans Marshmallow, certains utilisateurs sont confrontés à un comportement incohérent, l'opération fonctionnant parfois et échouant pour d'autres.

Comprendre le problème

La cause première de ce problème Le problème réside dans le nouveau Storage Access Framework (SAF) d'Android. Avant Marshmallow, les applications disposaient d'un accès illimité au stockage interne et externe, ce qui leur permettait de créer librement des répertoires.

Cependant, SAF introduit des autorisations qui restreignent l'accès en écriture au stockage externe par défaut. Par conséquent, les applications doivent demander explicitement des autorisations en écriture avant de tenter de créer des répertoires sur le stockage externe.

Solution : demander une autorisation en écriture

Pour résoudre le problème de création de répertoire, les applications doivent demander l'autorisation WRITE_EXTERNAL_STORAGE à l'utilisateur avant de tenter de créer des répertoires. Cette autorisation garantit que l'application dispose de l'autorisation nécessaire pour modifier le stockage externe.

Voici un exemple de code qui montre comment demander et vérifier l'autorisation d'écriture du stockage :

<code class="java">import android.Manifest;
import android.content.pm.PackageManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;


public class MyDevIDS extends AppCompatActivity {

        private static final int REQUEST_RUNTIME_PERMISSION = 123;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            if (CheckPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                // you have permission go ahead
                createApplicationFolder();
            } else {
                // you do not have permission go request runtime permissions
                RequestPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_RUNTIME_PERMISSION);
            }
        }

        @Override
        public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {

            switch (permsRequestCode) {

                case REQUEST_RUNTIME_PERMISSION: {
                    if (grantResults.length > 0
                            &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // you have permission go ahead
                        createApplicationFolder();
                    } else {
                        // you do not have permission show toast.
                    }
                    return;
                }
            }
        }

        public void RequestPermission(Activity thisActivity, String Permission, int Code) {
            if (ContextCompat.checkSelfPermission(thisActivity,
                    Permission)
                    != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                        Permission)) {
                } else {
                    ActivityCompat.requestPermissions(thisActivity,
                            new String[]{Permission},
                            Code);
                }
            }
        }

        public boolean CheckPermission(Context context, String Permission) {
            if (ContextCompat.checkSelfPermission(context,
                    Permission) == PackageManager.PERMISSION_GRANTED) {
                return true;
            } else {
                return false;
            }
        }
    }</code>
Copier après la connexion

Une fois le l'autorisation est accordée, les applications peuvent procéder à la création de répertoires à l'aide de la méthode mkdirs() sans rencontrer de problèmes. En implémentant cette solution, les développeurs peuvent garantir que leurs applications peuvent créer de manière fiable des répertoires dans Android Marshmallow et les versions ultérieures.

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
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!