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 && 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!