Rumah >Java >javaTutorial >Cara Menyelesaikan Isu Penciptaan Direktori dalam Android Marshmallow dan Seterusnya
Masalah Penciptaan Direktori dalam Android Marshmallow dan Seterusnya
Android Marshmallow memperkenalkan perubahan besar pada cara aplikasi berinteraksi dengan sistem fail, menyebabkan masalah dengan penciptaan direktori untuk beberapa aplikasi asli. Apabila cuba mencipta direktori dalam Marshmallow, sesetengah pengguna mengalami tingkah laku yang tidak konsisten, dengan operasi kadangkala berfungsi dan gagal yang lain.
Memahami Isu
Punca perkara ini masalah terletak pada Rangka Kerja Akses Storan (SAF) baharu Android. Sebelum Marshmallow, aplikasi mempunyai akses tanpa had kepada storan dalaman dan luaran, membolehkan mereka membuat direktori secara bebas.
Walau bagaimanapun, SAF memperkenalkan kebenaran yang menyekat akses tulis kepada storan luaran secara lalai. Akibatnya, aplikasi mesti meminta kebenaran menulis secara eksplisit sebelum cuba membuat direktori pada storan luaran.
Penyelesaian: Minta Kebenaran Tulis
Untuk menyelesaikan isu penciptaan direktori, aplikasi mesti meminta kebenaran WRITE_EXTERNAL_STORAGE daripada pengguna sebelum cuba membuat direktori. Kebenaran ini memastikan bahawa aplikasi mempunyai kebenaran yang diperlukan untuk mengubah suai storan luaran.
Berikut ialah contoh kod yang menunjukkan cara meminta dan menyemak kebenaran menulis storan:
<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>
Setelah kebenaran diberikan, aplikasi boleh meneruskan untuk mencipta direktori menggunakan kaedah mkdirs() tanpa menghadapi masalah. Dengan melaksanakan penyelesaian ini, pembangun boleh memastikan bahawa aplikasi mereka boleh membuat direktori dengan pasti dalam Android Marshmallow dan versi yang lebih baru.
Atas ialah kandungan terperinci Cara Menyelesaikan Isu Penciptaan Direktori dalam Android Marshmallow dan Seterusnya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!