[Android] Sử dụng thư viện Dexter để yêu cầu Permissions trong Runtime

Đăng bởi: Admin | Lượt xem: 1125 | Chuyên mục: Android

Trong Android, việc thực thi runtime permissions là một quá trình tẻ nhạt và cần rất nhiều code chỉ để có được một quyền duy nhất. Trong bài này, chúng ta sẽ tìm hiểu cách đơn giản hóa quá trình này bằng cách sử dụng thư viện Dexter.


Bài viết này sẽ giới thiệu về Dexter bao gồm các tính năng cơ bản được cung cấp bởi thư viện như sử dụng nó với SnackBar, các loại listeners khác nhau, xử lý lỗi ,... Bạn có thể tìm hiểu thêm thông tin trên website của Dexter.

1. Thêm Dexter vào project của bạn

Để bắt đầu sử dụng Dexter, chúng ta add dependency vào build.gradle (Module: app)

dependencies {
    // Dexter runtime permissions
    implementation 'com.karumi:dexter:4.2.0'
}

2. Yêu cầu 1 quyền

Để request 1 quyền, bạn có thể sử dụng phương thức withPermission() gắn với 1 callback PermissionListener để nhận trạng thái cho phép.

  • onPermissionGranted(): được gọi khi quyền được cho phép.
  • onPermissionDenied(): được gọi khi quyền bị từ chối. Ở đây bạn có thể kiểm tra xem sự cho phép bị từ chối vĩnh viễn bằng cách sử dụng điều kiện response.isPermanentlyDenied().

Ví dụ yêu cầu truy caajo CAMERA

Dexter.withActivity(this)
                .withPermission(Manifest.permission.CAMERA)
                .withListener(new PermissionListener() {
                    @Override
                    public void onPermissionGranted(PermissionGrantedResponse response) {
                        // permission is granted, open the camera
                    }
 
                    @Override
                    public void onPermissionDenied(PermissionDeniedResponse response) {
                        // check for permanent denial of permission
                        if (response.isPermanentlyDenied()) {
                            // navigate user to app settings
                        }
                    }
 
                    @Override
                    public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
                        token.continuePermissionRequest();
                    }
                }).check();

3. Yêu cầu nhiều quyền

Để request nhiều quyền cùng 1 lúc, chúng ta sử dụng method withPermissions()

Ví yêu cầu quyền sử dụng STORAGE và LOCATION

Dexter.withActivity(this)
                .withPermissions(
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.ACCESS_FINE_LOCATION)
                .withListener(new MultiplePermissionsListener() {
                    @Override
                    public void onPermissionsChecked(MultiplePermissionsReport report) {
                        // check if all permissions are granted
                        if (report.areAllPermissionsGranted()) {
                            // do you work now
                        }
 
                        // check for permanent denial of any permission
                        if (report.isAnyPermissionPermanentlyDenied()) {
                            // permission is denied permenantly, navigate user to app settings
                        }
                    }
 
                    @Override
                    public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                        token.continuePermissionRequest();
                    }
                })
                .onSameThread()
                .check();

4. Xử lý lỗi

Chúng ta cũng có thể bắt bất kỳ lỗi nào xảy ra trong khi tích hợp thư viện bằng cách sử dụng PermissionRequestErrorListener.

Dexter.withActivity(this)
                .withPermissions(
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.ACCESS_FINE_LOCATION)
                .withListener(listener)
                .withErrorListener(new PermissionRequestErrorListener() {
                    @Override
                    public void onError(DexterError error) {
                        Toast.makeText(getApplicationContext(), "Error occurred! " + error.toString(), Toast.LENGTH_SHORT).show();
                    }
                })
                .check();

Qua bài viết hy vọng các bạn sẽ biết thêm một cách đơn giản hơn để yêu cầu quyền cho ứng dụng của mình. 

Cảm ơn các bạn đã đọc bài viết.

Chào thân ái và quyết thắng!

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: Android

Học Kotlin cơ bản
Số bài học:
Lượt xem: 17611
Đăng bởi: Admin
Chuyên mục: Android

Học lập trình Flutter cơ bản
Số bài học:
Lượt xem: 58512
Đăng bởi: Admin
Chuyên mục: Android

Lập trình Android cơ bản
Số bài học:
Lượt xem: 22990
Đăng bởi: Admin
Chuyên mục: Android