Niit - Ict Hà Nội » Tin tức » Tin tức công nghệ » Yêu cầu quyền ứng dụng trong Android
Yêu cầu quyền ứng dụng trong Android

Bạn tuyên bố rằng ứng dụng của bạn cần có sự cho phép bằng cách liệt kê quyền trong bảng kê khai ứng dụng và sau đó yêu cầu người dùng phê duyệt từng quyền trong thời gian chạy (trên Android 6.0 trở lên).

 

Lập trình Android và những quyền trong Android

Yêu cầu quyền ứng dụng trong Android

 

Trang này mô tả cách sử dụng Thư viện hỗ trợ Android để kiểm tra và yêu cầu quyền. Khung Android cung cấp các phương thức tương tự như Android 6.0 (API cấp 23), nhưng sử dụng thư viện hỗ trợ giúp dễ dàng cung cấp khả năng tương thích với các phiên bản Android cũ hơn.

 

Add permissions to the manifest ( Thêm quyền & tạo kê khai )

 

Trên tất cả các phiên bản Android, để tuyên bố rằng ứng dụng của bạn cần có sự cho phép, hãy đặt phần tử trong tệp kê khai ứng dụng của bạn, như là một phần tử con của phần tử cấp cao nhất. Ví dụ: một ứng dụng cần truy cập internet sẽ có dòng này trong tệp kê khai:

 

Thêm quyền và tạo kê khai

 

Hành vi của hệ thống sau khi bạn khai báo quyền tùy thuộc vào mức độ nhạy cảm của quyền. Một số quyền được coi là 'bình thường' vì vậy hệ thống cấp ngay lập tức khi cài đặt.

 

Các quyền khác được coi là 'nguy hiểm' vì vậy người dùng phải cấp quyền truy cập ứng dụng của bạn một cách rõ ràng. Để biết thêm thông tin về các loại quyền khác nhau, xem cấp độ bảo vệ.

 

Check for permissions ( Quyền kiểm tra )

 

Nếu ứng dụng của bạn cần một sự cho phép nguy hiểm, bạn phải kiểm tra xem bạn có quyền đó mỗi khi bạn thực hiện một thao tác yêu cầu sự cho phép đó hay không.

 

>> NIIT - ICT Hà Nội là nơi đào tạo hàng đầu về lĩnh vực công nghệ thông tin cũng như nói cách khác là ( IT ) đặc biệt ở đây có những khóa học đang được đông đảo Doanh nghiệp cần tìm về các mảng cụ thể như như Lập trình Android v.v <<

 

Bắt đầu với Android 6.0 (API cấp 23), người dùng có thể thu hồi quyền từ bất kỳ ứng dụng nào vào bất kỳ lúc nào, ngay cả khi ứng dụng nhắm mục tiêu mức API thấp hơn.

 

Vì vậy, ngay cả khi ứng dụng đã sử dụng máy ảnh ngày hôm qua, nó không thể cho rằng nó vẫn có quyền đó ngày hôm nay.

 

Để kiểm tra xem bạn có được phép hay không, hãy gọi ContextCompat.CheckSelfPermission(). phương pháp. Ví dụ: đoạn mã này cho biết cách kiểm tra xem hoạt động có được phép ghi vào lịch hay không:

 

ví vụ về quyền kiểm tra

 

Nếu ứng dụng có quyền, phương thức trả về PERMISSION_GRANTED và ứng dụng có thể tiến hành thao tác. Nếu ứng dụng không có quyền, phương thức sẽ trả về PERMISSION_DENIED và ứng dụng phải yêu cầu người dùng cho phép rõ ràng.

 

Request permissions ( Yêu cầu quyền )

 

Khi ứng dụng của bạn nhận được PERMISSION_DENIED từ checkSelfPermission (), bạn cần nhắc người dùng về quyền đó.

 

Android cung cấp một số phương thức bạn có thể sử dụng để yêu cầu quyền, chẳng hạn như requestPermissions (), như được hiển thị trong đoạn mã dưới đây.

 

Gọi các phương thức này sẽ xuất hiện một hộp thoại Android tiêu chuẩn mà bạn không thể tùy chỉnh.

 

Cách hiển thị này cho người dùng tùy thuộc vào phiên bản Android của thiết bị cũng như phiên bản đích của ứng dụng của bạn, như được mô tả trong Tổng quan về quyền.

 

Explain why the app needs permissions ( ứng dụng cần quyền )

 

Trong một số trường hợp, bạn muốn giúp người dùng hiểu lý do tại sao ứng dụng của bạn cần được cho phép.

 

Ví dụ: nếu người dùng khởi chạy ứng dụng chụp ảnh, người dùng có thể sẽ không ngạc nhiên khi ứng dụng đó xin phép sử dụng máy ảnh, nhưng người dùng có thể không hiểu tại sao ứng dụng muốn truy cập vào vị trí hoặc danh bạ của người dùng.

 

Trước khi ứng dụng của bạn yêu cầu sự cho phép, bạn nên xem xét việc cung cấp lời giải thích cho người dùng. Hãy nhớ rằng bạn không muốn áp đảo người dùng bằng các giải thích nếu bạn cung cấp quá nhiều lời giải thích, người dùng có thể thấy ứng dụng bực bội và xóa nó.

 

Một cách tiếp cận bạn có thể sử dụng là chỉ cung cấp giải thích nếu người dùng đã từ chối yêu cầu cấp phép đó. Android cung cấp một phương thức tiện ích, nênShowRequestPermissionRationale (), trả về true nếu trước đó người dùng đã từ chối yêu cầu và trả về false nếu người dùng đã từ chối quyền và chọn tùy chọn Đừng hỏi lại trong hộp thoại yêu cầu quyền hoặc nếu chính sách thiết bị cấm sự cho phép.

 

Nếu người dùng tiếp tục cố gắng sử dụng chức năng yêu cầu quyền, nhưng vẫn từ chối yêu cầu cấp phép, điều đó có thể có nghĩa là người dùng không hiểu tại sao ứng dụng cần quyền để cung cấp chức năng đó. Trong tình huống như vậy, có lẽ nên thể hiện một lời giải thích.

 

Tư vấn thêm về cách tạo trải nghiệm người dùng tốt khi yêu cầu cấp phép được cung cấp trong Thực tiễn tốt nhất về quyền của ứng dụng.

 

Request the permissions you need ( Quyền bạn cần )

 

Nếu ứng dụng của bạn chưa có quyền mà nó cần, ứng dụng phải gọi một trong các phương thức requestPermissions () để yêu cầu các quyền phù hợp.

 

Ứng dụng của bạn vượt qua các quyền mà nó muốn và mã yêu cầu số nguyên mà bạn chỉ định để xác định yêu cầu cấp phép này.

 

Phương pháp này hoạt động không đồng bộ. Nó trả về ngay lập tức và sau khi người dùng trả lời lời nhắc, hệ thống sẽ gọi phương thức gọi lại của ứng dụng với kết quả, chuyển cùng mã yêu cầu mà ứng dụng đã chuyển đến requestPermissions ().

 

Đoạn mã sau kiểm tra xem ứng dụng có được phép đọc danh bạ của người dùng không. Nếu nó không có quyền, nó sẽ kiểm tra xem nó có hiển thị giải thích cho việc cần sự cho phép hay không và nếu không cần giải thích, nó sẽ yêu cầu sự cho phép:

 

ví dụ về quyền bạn cần

 

Lời nhắc được hiển thị bởi hệ thống mô tả nhóm quyền mà ứng dụng của bạn cần truy cập, không phải là quyền cụ thể.

 

Handle the permissions request response ( xử lý phàn hồi yêu cầu quyền )

 

Khi người dùng phản hồi yêu cầu cấp phép của ứng dụng của bạn, hệ thống sẽ gọi phương thức onRequestPermissionsResult () của ứng dụng của bạn, chuyển phản hồi của người dùng.

 

Ứng dụng của bạn phải ghi đè phương thức đó để tìm hiểu xem quyền có được cấp hay không. Cuộc gọi lại được chuyển cùng mã yêu cầu mà bạn đã chuyển đến requestPermissions ().

 

Ví dụ: nếu một ứng dụng yêu cầu truy cập READ_CONTACTS, ứng dụng có thể có phương thức gọi lại sau:

 

xử lý phàn hồi quyền yêu cầu

 

Hộp thoại được hiển thị bởi hệ thống mô tả nhóm quyền mà ứng dụng của bạn cần truy cập; nó không liệt kê sự cho phép cụ thể

 

Ví dụ: nếu bạn yêu cầu quyền READ_CONTACTS, hộp thoại hệ thống chỉ cho biết ứng dụng của bạn cần quyền truy cập vào danh bạ của thiết bị.

 

Người dùng chỉ cần cấp quyền một lần cho mỗi nhóm quyền. Nếu ứng dụng của bạn yêu cầu bất kỳ quyền nào khác trong nhóm đó (được liệt kê trong bảng kê khai ứng dụng của bạn), hệ thống sẽ tự động cấp cho họ.

 

Khi bạn yêu cầu quyền, hệ thống gọi phương thức gọi lại onRequestPermissionsResult () của bạn và chuyển PERMISSION_GRANTED, giống như cách người dùng đã cấp yêu cầu của bạn thông qua hộp thoại hệ thống.

 

Ví dụ: giả sử bạn liệt kê cả READ_CONTACTS và WRITE_CONTACTS trong bảng kê khai ứng dụng của bạn. Nếu bạn yêu cầu READ_CONTACTS và người dùng cấp quyền và sau đó bạn yêu cầu WRITE_CONTACTS, hệ thống ngay lập tức cấp cho bạn quyền đó mà không cần tương tác với người dùng.

 

Nếu người dùng từ chối yêu cầu cấp phép, ứng dụng của bạn sẽ có hành động thích hợp. Ví dụ: ứng dụng của bạn có thể hiển thị hộp thoại giải thích lý do tại sao ứng dụng không thể thực hiện hành động được yêu cầu của người dùng cần sự cho phép đó.

 

Khi hệ thống yêu cầu người dùng cấp quyền, người dùng có tùy chọn yêu cầu hệ thống không yêu cầu quyền đó một lần nữa.

 

Trong trường hợp đó, bất cứ khi nào một ứng dụng sử dụng requestPermissions () để yêu cầu quyền đó một lần nữa, hệ thống sẽ ngay lập tức từ chối yêu cầu.

 

Hệ thống gọi phương thức gọi lại onRequestPermissionsResult () của bạn và vượt qua PERMISSION_DENIED, giống như cách người dùng đã từ chối yêu cầu của bạn một lần nữa.

 

Phương thức này cũng trả về false nếu chính sách thiết bị cấm ứng dụng có quyền đó. Điều này có nghĩa là khi bạn gọi requestPermissions (), bạn không thể cho rằng mọi tương tác trực tiếp với người dùng đã diễn ra.

 

Để cung cấp trải nghiệm người dùng tốt nhất khi yêu cầu quyền ứng dụng, hãy xem Thực tiễn tốt nhất về quyền của ứng dụng.

 

Declare permissions by API level ( Quyền theo cấp API )

 

Để chỉ khai báo quyền trên các thiết bị hỗ trợ quyền thời gian chạy, nghĩa là các thiết bị chạy Android 6.0 (API cấp 23) hoặc cao hơn bao gồm thẻ sử dụng-allow-sdk-23 thay vì thẻ cho phép sử dụng.

 

Khi sử dụng một trong hai thẻ này, bạn có thể đặt thuộc tính maxSdkVersion để chỉ định rằng, trên các thiết bị chạy phiên bản cao hơn, không cần có sự cho phép cụ thể.

 

Additional resources ( Tài nguyên bổ sung )

 

Để biết thêm thông tin về các quyền, hãy đọc các bài viết sau:
 
  • Tổng quan về quyền 
  • Ứng dụng quyền thực tiễn tốt nhất

 

Để tìm hiểu thêm về yêu cầu quyền, hãy tải xuống các ứng dụng mẫu sau:

 

  • Android RuntimePermissionBasic Mẫu
  • Mẫu RuntimePermissions của Android