Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Quyền Read/Write vào folder Android/data trên android 12

23:05 13-08-2022 1.631 lượt xem 0 bình luận

Xin chào mọi người hiện tại em phát triển 1 tool có cần truy cập đến folder "Android/data".

Như mọi người cũng đã biết thì từ android 10 google đã thắt chặt vấn đề truy cập bừa bãi vào folder nội bộ của ứng dụng khác, và vẫn có thể thêm lệnh này vào manifest để truy cập như bình thường

android:requestLegacyExternalStorage="true"

Nhưng từ android 12 trở lên thì cái này bị loại bỏ hoàn toàn.Sau 1 ngày tìm kiếm cách khác google thì em đã có được quyền truy cập vào thư mục em cần thiết bằng cách sử dụng hàm.

public void openDirectory() {

        String path = Environment.getExternalStorageDirectory() + "/Android/data/com.bumbum.sg246/files";

        File file = new File(path);

        String startDir="", finalDirPath;



        if (file.exists()) {

            startDir = "Android%2Fdata%2Fcom.bumbum.sg246%2Ffiles";

        }



        StorageManager sm = (StorageManager) getSystemService(Context.STORAGE_SERVICE);



        Intent intent = sm.getPrimaryStorageVolume().createOpenDocumentTreeIntent();





        Uri uri = intent.getParcelableExtra("android.provider.extra.INITIAL_URI");



        String scheme = uri.toString();



        Log.d("TAG", "INITIAL_URI scheme: " + scheme);



        scheme = scheme.replace("/root/", "/document/");



        finalDirPath = scheme + "%3A" + startDir;



        uri = Uri.parse(finalDirPath);



        intent.putExtra("android.provider.extra.INITIAL_URI", uri);



        Log.d("TAG", "uri: " + uri.toString());



        try {

            Log.e("wwww",intent.toString());

            startActivityForResult(intent, 6);

        } catch (ActivityNotFoundException ignored) {



        }}

 

Mọi người có thể thấy folder e đang muốn truy cập vào là "Android/data/com.bumbum.sg246/files"

Và nhận quyền và uri truy cập vào folder ở hàm onActivityResult

@Override

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK&&requestCode==6) {

            if (data != null) {

                Uri uri = data.getData();

                    // these are my SharedPerfernce values for remembering the path

                getContentResolver().takePersistableUriPermission(uri,Intent.FLAG_GRANT_READ_URI_PERMISSION

                        | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

                    sharedPreferences.edit().putString("uri", uri.toString()).commit();

            }

        }

    }

Nhưng trình hình là nếu mình create thêm 1 folder con trong mục files,thì lại không thể có quyền truy cập vào folder đó.Mọi người ai có kinh nghiệm về cái này và biết cách để luôn có quyền truy cập vào tất cả folder con bên trong ,có thể chỉ cho mình được không ạ.Mình xin cảm ơn

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập

Câu hỏi mới nhất