- vừa được xem lúc

EasyPermissions Library

0 0 13

Người đăng: Dong Thi Hien

Theo Viblo Asia

1. Introduction

1. Permission

  • Để bảo vệ quyền riêng tư của người dùng, Android đưa ra khái niệm Permission. Để ứng dụng của bạn có thể dùng được tài nguyên của hệ thống như là camera, storage, wiffi, .. thì ứng dụng của bạn buộc phải được sự cho phép của người dùng mới có thể sử dụng.
  • Các phiên bản Android dưới 23, khi cài đặt ứng dụng bạn phải cấp tất cả các quyền mà ứng dụng yêu cầu. Nếu user cấp quyền cho ứng dụng, nó sẽ hoạt động bình thường, nếu không thì bạn không thể các chức năng mà yêu cầu quyền đó. Ví dụ: Ứng dụng cần cấp quyền wiffi và camera, nhưng bạn chỉ cấp mỗi quyền wiffi, vậy bạn không thể sử dụng tính năng chụp ảnh của app.
  • Từ phiên bản 23 trở đi, Android đưa ra cụm từ mới đó là* "Runtime Permission"* . Với tính năng này, ứng dụng của bạn không cần phải hỏi permission dồn dập ngay từ lúc cài app. Mà chỉ khi nào cần dùng đến nó thì app mới request. Để tránh trường hợp, tính năng đó user ít sử dụng nhưng cần cấp quyền thì chỉ khi user dùng nó thì mới cần cấp quyền => đỡ spam từ đầu. => Có nhiều cách để implement permission trong Android, một trong số đó là sử dụng thư viện EasyPermissions.

2. EasyPermissions

EasyPermissions is a wrapper library to simplify basic system permissions logic when targeting Android M or higher.

  • Đúng như cái tên của nó, EasyPermission giúp chúng ta dễ dàng implement các permission trong ứng dụng, bất kể trong quá trình cấp quyền bạn có thực hiện các thao tác gì. Việc cấp quyền được mô tả theo sơ đồ dưới đây:

Chúng ta cùng đi tới cách sử dụng thư viện này nhé!

2. Usages

  • Trước tiên, để sử dụng được thư viện thì các bạn hãy thêm vào file build.gradle nhá:
dependencies { // For developers using AndroidX in their applications implementation 'pub.devrel:easypermissions:3.0.0' // For developers using the Android Support Library implementation 'pub.devrel:easypermissions:2.0.1'
}
  • Để sử dụng EasyPermissions, bạn phải có Activity hay Fragment override hàm onRequestPermissionsResult:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); }
}
  • Ví dụ mình request hai quyền đó là CAMERAACCESS_FINE_LOCATION. Có một số điều cần lưu ý như sau:
  • Sử dụng hàm EasyPermissions#hasPermissions(...) để check xem app đã yêu cầu quyền chưa. Bạn có thể truyền bao nhiêu permission làm tham số cùng được. Ví dụ:
val permissions = arrayOf( Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION ) if (EasyPermissions.hasPermissions(this, *permissions)) { // do something }
  • Request permission với hàm EasyPermissions#requestPermissions. Phương thức này sẽ request tới các quyền hệ thống, bạn có thể truyền vào bao nhiêu quyền cũng được. Ví dụ:
EasyPermissions.requestPermissions( this, getString(R.string.permission_rationale_calendar), PERMISSIONS_REQUEST_CODE, *permissions )
  • Sử dụng anotation AfterPermissionGranted . Đây là optional thôi nhưng mà nó cũng khá là hữu ích: Nếu như các quyền đều được cấp, thì tất cả những phương thức mà có anotation này đều được thực thi. Nhưng các quyền phải có cùng một request code và các hàm mà có anotation này không được có tham số đầu vào (nếu là java thì phải dùng void). Ví dụ:
@AfterPermissionGranted(RC_CAMERA_AND_LOCATION)
private void methodRequiresTwoPermission() { String[] perms = {Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION}; if (EasyPermissions.hasPermissions(this, perms)) { // Already have permission, do the thing // ... } else { // Do not have permissions, request them now EasyPermissions.requestPermissions(this, getString(R.string.camera_and_location_rationale), RC_CAMERA_AND_LOCATION, perms); }
}

Ngoài ra, có một số phương thức khác để bạn tham khảo:

public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } @Override public void onPermissionsGranted(int requestCode, List<String> list) { // Some permissions have been granted // ... } @Override public void onPermissionsDenied(int requestCode, List<String> list) { // Some permissions have been denied // ... }
}

Trên đây là một số thông tin cần thiết về thư viện implement permission EasyPermissions.

Tham khảo:

Library: https://github.com/googlesamples/easypermissions Document: https://blog.mindorks.com/implementing-easy-permissions-in-android-android-tutorial

Bình luận

Bài viết tương tự

- vừa được xem lúc

Create Certificates, Identifiers & Profiles App IOS

Mở đầu. Xin chào các bạn hôm này mình sẽ giới thiệu cho các bạn một cách tạo certificates, identifiers & profiles với tài khoản Apple Developer. Có tài khoản Apple Developer. Ai chưa có thì không cần đọc tiếp nha :.

0 0 36

- vừa được xem lúc

Chương 5 Object oriented programming

Chương 5 Object oriented programming. Tôi lần đầu tiên được giới thiệu về lập trình hướng đối tượng ở trường cao đẳng nơi tôi đã có một giới thiệu tóm tắc về c++.

0 0 24

- vừa được xem lúc

Hướng dẫn tạo link tracking nguồn cài đặt cho mobile app (xác định nguồn cài đặt cho mobile app)

Giới thiệu. Bạn đang chạy quá nhiều campaign cho ứng dụng mobile từ các mạng xã hội: facebook, twitter, ... các chiến dịch offline cũng như các chiến dịch online của bên thứ 3. Bạn không thể xác định được nguồn nào mang cho mình lượng install cao nhất. Vì nếu dùng shortlink thì chỉ đo được lượt clic

0 0 28

- vừa được xem lúc

SwiftUi: Bắt đầu từ những điều căn bản nhất. Phần 1

Trong bài này, bạn sẽ được tìm hiểu về việc tạo ra giao diện bằng việc khai báo và tuỳ chỉnh views, cách sử dụng các biến trạng thái để cập nhật giao diện thay vì dùng code. Tập sử dụng tính năng new preview và live preview, những trải nghiệm thú vị khi làm việc cùng với code và WYSIWYG layout.

0 0 57

- vừa được xem lúc

Những điều khác nhau cần biết giữa thiết kế ứng dụng Android và ứng dung iOS

Để tạo ra ứng dụng có trải nghiệm tốt nhất, tương thích với dòng thiết bị, bạn nên ghi nhớ sự khác biệt giữa 2 nền tảng iOS và Android. Các ứng dụng này không chỉ khác nhau ở phần trông như thế nào, chúng cũng khác nhau về cấu trúc và luồng ứng dụng.

0 0 26

- vừa được xem lúc

Những khó khăn khi làm dự án maintain ( dưới góc nhìn của một React Native Developer)

Đi làm một vài năm ở công ty outsource, minh thấy hầu như các anh em đều khá e ngại với các dự án maintain, nhất là thuộc hàng code "siêu thối", spec thuộc loại "siêu to khổng lồ ",... Và mình cũng thế, mình cũng đang "theo đuổi" một chú em với "chức năng siêu to kh

0 0 309