Thông tin cập nhật về quyền trong Android 11

Android 11 cho phép người dùng chỉ định các quyền chi tiết hơn đối với vị trí, micrô và máy ảnh. Ngoài ra, hệ thống sẽ đặt lại quyền của các ứng dụng không dùng đến nhắm đến Android 11 trở lên và các ứng dụng có thể cần cập nhật các quyền được khai báo nếu sử dụng cửa sổ cảnh báo 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 dành cho người dùng sẽ chứa tuỳ 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ý quyền một lần.

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 và bạn không dùng đến Android trong vài tháng, thì hệ thống sẽ bảo vệ dữ liệu người dùng bằng cách tự động đặt lại các quyền nhạy cảm khi bắt đầu chạy mà người dùng đã cấp cho ứng dụng. Thao tác này có hiệu lực tương tự như khi người dùng xem quyền trong phần cài đặt hệ thống và thay đổi cấp truy cập của ứng dụng thành Từ chối. Nếu ứng dụng của bạn tuân theo các phương pháp hay nhất để yêu cầu quyền trong thời gian chạy, thì bạn không cần thực hiện bất kỳ thay đổi nào đối với ứng dụng. Lý do là khi 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ác quyền mà họ cần.

Tìm hiểu thêm về cách hệ thống tự động đặt lại quyền cho các ứng dụng 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 cho một quyền cụ thể nhiều lần trong suốt thời gian cài đặt ứng dụng trên một thiết bị, thì 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 yêu cầu cấp 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 ngăn chặn các yêu cầu lặp lại đối với các 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 người kiểm thử không bất ngờ khi hộp thoại yêu cầu không xuất hiện. Để 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 trang tham khảo API về quyền.

Tìm hiểu thêm về cách xử lý tình trạng từ chối cấp quyền 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 SYSTEM_ALERT_WINDOW cho ứng dụng. Mục đích của những thay đổi này là 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.

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ố lớp ứng dụng nhất định được tự động cấp quyền SYSTEM_ALERT_WINDOW theo yêu cầu:

  • Mọi ứng dụng có ROLE_CALL_SCREENING và yêu cầu SYSTEM_ALERT_WINDOW sẽ tự động được cấp quyền. Nếu mất ROLE_CALL_SCREENING, ứng dụng sẽ mất quyền này.

  • Bất kỳ ứng dụng nào chụp màn hình qua MediaProjection và yêu cầu SYSTEM_ALERT_WINDOW đều sẽ tự động được cấp quyền, trừ phi người dùng rõ ràng từ chối cấp quyền cho ứng dụng. Khi ngừng chụp màn hình, ứng dụng sẽ mất quyền đó. Trường hợp sử dụng này chủ yếu dành cho các ứ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 này có thể chỉ cần yêu cầu trực tiếp 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, ý định ACTION_MANAGE_OVERLAY_PERMISSION luôn đưa người dùng đến màn hình Cài đặt cấp cao nhất, tại đây người dùng có thể cấp hoặc thu hồi quyền SYSTEM_ALERT_WINDOW đối với ứ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, việc này sẽ đưa người dùng đến một 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 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 các API dành cho số điện thoại như trong danh sách sau, thì bạn phải yêu cầu quyền READ_PHONE_NUMBERS, thay vì quyền READ_PHONE_STATE.

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 đó, thì bạn có thể tiếp tục yêu cầu READ_PHONE_STATE trên mọi phiên bản Android. Tuy nhiên, nếu bạn chỉ sử dụng quyền READ_PHONE_STATE cho các phương thức trong danh sách trước đó, hãy cập nhật tệp kê khai như sau:

  1. Thay đổi nội dung khai báo về READ_PHONE_STATE để ứng dụng chỉ sử dụng quyền trên Android 10 (API cấp 29) trở xuống.
  2. 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 bằng các thay đổi mới nhất về quyền riêng tư trong Android 11