Maison  >  Article  >  Java  >  Quel est le problème avec la création d’un répertoire dans Android Marshmallow ?

Quel est le problème avec la création d’un répertoire dans Android Marshmallow ?

DDD
DDDoriginal
2024-10-24 03:22:46464parcourir

What is the issue with creating a directory in Android Marshmallow?

Problème de création d'un répertoire dans Android Marshmallow

Dans Android 5.0, la création d'un répertoire à l'aide d'une application native fonctionne correctement. Mais sous Android 6.0 (Marshmallow), parfois cela fonctionne et parfois non. Vous trouverez ci-dessous le code permettant de créer un nouveau répertoire. Le répertoire est utilisé pour enregistrer les fichiers vidéo et image.

<code class="java">public static void createApplicationFolder() {
    File f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME);
    f.mkdirs();
    f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_COMPRESSED_VIDEOS_DIR);
    f.mkdirs();
    f = new File(Environment.getExternalStorageDirectory(), File.separator + Config.VIDEO_COMPRESSOR_APPLICATION_DIR_NAME + Config.VIDEO_COMPRESSOR_TEMP_DIR);
    f.mkdirs();

}</code>

Solution :

Afin de résoudre ce problème, vous devez ajouter cette autorisation dans le fichier manifeste :

<code class="xml"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></code>

Il est également nécessaire que les autorisations d'exécution soient demandées lors de la première exécution de l'application. Voici le code modifié :

<code class="java">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)) {
            // 具有权限,继续执行
            createApplicationFolder();
        } else {
            // 没有权限,请求运行时权限
            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
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 具有权限,继续执行
                    createApplicationFolder();
                } else {
                    // 没有权限,显示吐司
                }
                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>

Après avoir ajouté ce code, l'autorisation de créer un répertoire sera toujours demandée lors de la première exécution de l'application.

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