Rumah  >  Artikel  >  Java  >  Apakah masalah dengan mencipta direktori dalam Android Marshmallow?

Apakah masalah dengan mencipta direktori dalam Android Marshmallow?

DDD
DDDasal
2024-10-24 03:22:46464semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn