Isu mencipta direktori dalam Android Marshmallow
Dalam Android 5.0, mencipta direktori menggunakan apl asli berfungsi dengan baik. Tetapi dalam Android 6.0 (Marshmallow), kadangkala ia berfungsi dan kadangkala tidak. Di bawah ialah kod tentang cara membuat direktori baharu. Direktori digunakan untuk menyimpan fail video dan imej.
<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>
Penyelesaian:
Untuk menyelesaikan masalah ini, anda perlu menambah kebenaran ini dalam fail manifes:
<code class="xml"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></code>
Juga perlu keizinan Runtime diminta apabila aplikasi mula dijalankan. Berikut ialah kod yang diubah suai:
<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>
Selepas menambah kod ini, kebenaran untuk mencipta direktori akan sentiasa diminta pada kali pertama aplikasi dijalankan.
Atas ialah kandungan terperinci Apakah masalah dengan mencipta direktori dalam Android Marshmallow?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!