Android 11 cho phép người dùng chỉ định các chỉ định chi tiết hơn quyền truy cập thông tin vị trí, micrô và máy ảnh. Ngoài ra, hệ thống đặt lại quyền của những ứng dụng không dùng đến và nhắm đến Android 11 hoặc cấp cao hơn, đồng thời các ứng dụng có thể cần cập nhật các quyền mà chúng khai báo nếu sử dụng cửa sổ thông báo của hệ thống hoặc đọc thông tin liên quan đến số điện thoại.
Cấp quyền một lần
Kể từ Android 11, bất cứ khi nào ứng dụng của bạn yêu cầu cấp quyền liên quan đến vị trí, micrô hoặc máy ảnh, hộp thoại cấp quyền mà người dùng nhìn thấy chứa tùy chọn có tên là Chỉ lần này. Nếu người dùng chọn tuỳ chọn này trong hộp thoại, thì ứng dụng của bạn sẽ tạm thời được cấp quyền một lần.
Tìm hiểu thêm về cách hệ thống xử lý một lần quyền truy cập.
Tự động đặt lại quyền từ các ứng dụng không dùng đến
Nếu ứng dụng của bạn nhắm đến Android 11 trở lên nhưng không được dùng trong một vài ngày tháng, hệ thống bảo vệ dữ liệu người dùng bằng cách tự động đặt lại thông tin quyền khi bắt đầu chạy mà người dùng đã cấp cho ứng dụng của bạn. Thao tác này có cùng như thể người dùng đã xem một quyền trong phần cài đặt hệ thống và thay đổi cấp truy cập của ứng dụng để Từ chối. Nếu ứng dụng của bạn làm theo các phương pháp hay nhất để yêu cầu quyền trong thời gian chạy, bạn không cần thực hiện bất kỳ thay đổi nào đối với ứng dụng của bạn. Đó là bởi vì, với tư cách là người dùng tương tác với các tính năng trong ứng dụng, bạn nên xác minh rằng các tính năng đó các quyền mà họ cần.
Tìm hiểu thêm về cách hệ thống tự động đặt lại các quyền của những nội dung không dùng đến .
Chế độ hiển thị hộp thoại cấp quyền
Kể từ Android 11, nếu người dùng nhấn vào Từ chối để quyền cụ thể nhiều lần trong suốt thời gian cài đặt ứng dụng của bạn trên một thiết bị, người dùng sẽ không thấy hộp thoại cấp quyền của hệ thống nếu ứng dụng của bạn yêu cầu quyền đó lại. Hành động của người dùng ngụ ý "không hỏi lại". Trên các phiên bản trước, người dùng sẽ thấy hộp thoại cấp quyền của hệ thống mỗi khi ứng dụng của bạn yêu cầu cấp quyền, trừ khi trước đó người dùng đã chọn hộp đánh dấu hoặc tuỳ chọn "không hỏi lại". Thay đổi này về hành vi trong Android 11 không khuyến khích lặp lại các yêu cầu cấp quyền mà người dùng đã chọn từ chối.
Để xác định xem một ứng dụng có bị từ chối cấp quyền (cho mục đích gỡ lỗi và kiểm thử) vĩnh viễn hay không, hãy sử dụng lệnh sau:
adb shell dumpsys package PACKAGE_NAME
Trong đó PACKAGE_NAME là tên gói cần kiểm tra.
Kết quả của lệnh chứa các phần như sau:
... runtime permissions: android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] ...
Quyền truy cập đã bị người dùng từ chối một lần sẽ bị gắn cờ USER_SET
.
Quyền truy cập đã bị người dùng từ chối hai lần sẽ bị gắn cờ USER_FIXED
.
Trong quá trình kiểm thử, bạn nên đặt lại các cờ này để đảm bảo rằng người kiểm thử ngạc nhiên khi hộp thoại yêu cầu không hiển thị. Để thực hiện việc này, hãy sử dụng lệnh:
adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed
PERMISSION_NAME là tên của quyền bạn muốn đặt lại. Để xem danh sách đầy đủ các quyền của ứng dụng Android, hãy truy cập API Quyền trang tham khảo.
Tìm hiểu thêm về cách xử lý quyền từ chối trong ứng dụng của bạn.
Các thay đổi đối với cửa sổ thông báo của hệ thống
Android 11 thực hiện một số thay đổi đối với cách cấp quyền cho ứng dụng
SYSTEM_ALERT_WINDOW
quyền. Mục đích của những thay đổi này là để bảo vệ người dùng bằng cách cấp quyền
cấp quyền truy cập có chủ đích hơn.
Một số ứng dụng nhất định được tự động cấp quyền SYSTEM_ALERT_WINDOW khi có yêu cầu
Một số loại ứng dụng nhất định sẽ tự động được cấp SYSTEM_ALERT_WINDOW
quyền theo yêu cầu:
Bất kỳ ứng dụng nào có
ROLE_CALL_SCREENING
và yêu cầuSYSTEM_ALERT_WINDOW
sẽ tự động được cấp quyền. Nếu ứng dụng sẽ mấtROLE_CALL_SCREENING
, ứng dụng sẽ mất quyền.Bất kỳ ứng dụng nào chụp màn hình qua
MediaProjection
và yêu cầuSYSTEM_ALERT_WINDOW
sẽ tự động được cấp quyền trừ khi người dùng từ chối cấp quyền cho ứng dụng một cách rõ ràng. Khi ứng dụng ngừng chụp màn hình thì ứng dụng sẽ mất quyền đó. Trường hợp sử dụng này chủ yếu dành cho ứng dụng phát trực tiếp trò chơi.
Các ứng dụng này không cần gửi
ACTION_MANAGE_OVERLAY_PERMISSION
để có quyền SYSTEM_ALERT_WINDOW
; các ứng dụng có thể chỉ cần yêu cầu
SYSTEM_ALERT_WINDOW
.
Các ý định MANAGE_OVERLAY_PERMISSION luôn đưa người dùng đến màn hình cấp quyền của hệ thống
Kể từ Android 11,
ACTION_MANAGE_OVERLAY_PERMISSION
ý định luôn đưa người dùng đến màn hình Cài đặt cấp cao nhất, nơi
người dùng có thể cấp hoặc thu hồi
SYSTEM_ALERT_WINDOW
quyền cho ứng dụng. Mọi dữ liệu package:
trong ý định đều bị bỏ qua.
Trong các phiên bản Android cũ, ý định ACTION_MANAGE_OVERLAY_PERMISSION
có thể chỉ định một gói để đưa người dùng đến màn hình dành riêng cho ứng dụng
để quản lý quyền. Chức năng này không được hỗ trợ kể từ
Android 11. Thay vào đó, trước tiên, người dùng phải chọn ứng dụng họ muốn
để cấp hoặc thu hồi quyền. Thay đổi này nhằm bảo vệ người dùng
bằng cách làm cho việc cấp quyền có chủ đích hơn.
Số điện thoại
Android 11 thay đổi quyền liên quan đến điện thoại mà ứng dụng của bạn sử dụng khi đọc số điện thoại.
Nếu ứng dụng của bạn nhắm đến Android 11 trở lên và cần truy cập vào
CANNOT TRANSLATE
READ_PHONE_NUMBERS
thay vì quyền READ_PHONE_STATE
.
- Phương thức
getLine1Number()
trong cả haiTelephonyManager
lớp vàTelecomManager
. - Phương thức
getMsisdn()
không được hỗ trợ trongTelephonyManager
.
Nếu ứng dụng của bạn khai báo READ_PHONE_STATE
để gọi các phương thức khác với các phương thức trong
danh sách trước đó, bạn có thể tiếp tục yêu cầu READ_PHONE_STATE
trên tất cả
Phiên bản Android. Nếu bạn chỉ sử dụng quyền READ_PHONE_STATE
cho
trong danh sách trước đó, tuy nhiên, hãy cập nhật tệp kê khai như sau:
- Thay đổi nội dung khai báo về
READ_PHONE_STATE
để ứng dụng có thể sử dụng quyền chỉ có trên Android 10 (API cấp 29) trở xuống. - Thêm quyền
READ_PHONE_NUMBERS
.
Đoạn mã khai báo tệp kê khai sau đây minh hoạ quy trình này:
<manifest> <!-- Grants the READ_PHONE_STATE permission only on devices that run Android 10 (API level 29) and lower. --> <uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /> </manifest>
Tài nguyên khác
Để biết thêm thông tin về những thay đổi đối với quyền trong Android 11, hãy xem các tài liệu sau:
Video
Phát triển với những thay đổi mới nhất về quyền riêng tư trong Android 11