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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-24 03:25:31421parcourir

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>

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!

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