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 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ầu SYSTEM_ALERT_WINDOW sẽ tự động được cấp quyền. Nếu ứng dụng sẽ mất ROLE_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ầu SYSTEM_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.

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:

  1. 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.
  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 với những thay đổi mới nhất về quyền riêng tư trong Android 11