Giải thích quyền truy cập vào thông tin nhạy cảm hơn

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Các quyền liên quan đến vị trí, micrô và máy ảnh sẽ cấp cho ứng dụng của bạn quyền truy cập vào thông tin đặc biệt nhạy cảm về người dùng. Nền tảng có một số cơ chế (như mô tả trên trang này) để giúp người dùng nắm bắt thông tin và kiểm soát những ứng dụng nào có thể truy cập vào thông tin vị trí, micrô và máy ảnh.

Các tính năng bảo vệ quyền riêng tư này của hệ thống sẽ không ảnh hưởng đến cách ứng dụng của bạn xử lý những quyền liên quan đến vị trí, micrô và máy ảnh, miễn là bạn làm theo các phương pháp hay nhất về quyền riêng tư.

Cụ thể, hãy đảm bảo bạn thực hiện những điều sau trong ứng dụng:

  • Chờ đến khi người dùng cấp quyền CAMERA cho ứng dụng của bạn thì mới truy cập vào máy ảnh của thiết bị.
  • Chờ đến khi người dùng cấp quyền RECORD_AUDIO cho ứng dụng của bạn thì mới truy cập vào micrô của thiết bị.
  • Chờ đến khi người dùng tương tác với một tính năng trong ứng dụng cần có thông tin vị trí thì mới yêu cầu quyền ACCESS_COARSE_LOCATION hoặc quyền ACCESS_FINE_LOCATION, như mô tả trong hướng dẫn về cách yêu cầu quyền truy cập thông tin vị trí
  • Chờ đến khi người dùng cấp cho ứng dụng của bạn quyền ACCESS_COARSE_LOCATION hoặc quyền ACCESS_FINE_LOCATION thì mới yêu cầu quyền ACCESS_BACKGROUND_LOCATION.

Bảng tổng quan về quyền riêng tư

Dòng thời gian dọc cho biết những ứng dụng
         đã truy cập thông tin vị trí và thời điểm truy cập
Hình 1. Màn hình Sử dụng vị trí trên Bảng tổng quan về quyền riêng tư.

Trên các thiết bị được hỗ trợ chạy Android 12 trở lên, màn hình Bảng tổng quan về quyền riêng tư sẽ xuất hiện trong phần cài đặt hệ thống. Trên màn hình này, người dùng có thể truy cập vào những màn hình riêng biệt xuất hiện khi các ứng dụng truy cập vào thông tin vị trí, máy ảnh và micrô. Mỗi màn hình hiển thị một dòng thời gian cho biết thời điểm các ứng dụng truy cập vào loại dữ liệu cụ thể. Hình 1 cho thấy dòng thời gian truy cập dữ liệu đối với thông tin vị trí.

Giải thích lý do truy cập dữ liệu

Ứng dụng của bạn có thể giải thích lý do để người dùng hiểu được tại sao ứng dụng đó truy cập vào thông tin vị trí, máy ảnh hoặc micrô. Lý do này có thể xuất hiện trên màn hình mới của Bảng tổng quan về quyền riêng tư, màn hình quyền của ứng dụng hoặc cả hai.

Để giải thích lý do ứng dụng của bạn truy cập vào thông tin vị trí, máy ảnh và micrô, hãy hoàn tất các bước sau:

  1. Thêm một hoạt động (khi được bắt đầu) sẽ giải thích lý do tại sao ứng dụng của bạn thực hiện một loại hành động truy cập dữ liệu cụ thể. Trong hoạt động này, hãy đặt thuộc tính android:permission thành START_VIEW_PERMISSION_USAGE.

    Nếu ứng dụng của bạn nhắm đến Android 12 trở lên, bạn phải xác định rõ giá trị cho thuộc tính android:exported.

  2. Thêm bộ lọc ý định sau đây vào hoạt động mới thêm:

    <!-- android:exported required if you target Android 12. -->
    <activity android:name=".DataAccessRationaleActivity"
              android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
              android:exported="true">
           <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on
                your app permission's page in system settings.
                VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information
                icon on the Privacy Dashboard screen. -->
        <intent-filter>
           <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
           <action android:name="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" />
           <category android:name="android.intent.category.DEFAULT" />
           ...
        </intent-filter>
    </activity>
    
  3. Quyết định nội dung sẽ xuất hiện trong hoạt động giải thích lý do truy cập dữ liệu. Ví dụ: bạn có thể hiển thị trang web ứng dụng của mình hoặc một bài viết trong trung tâm trợ giúp. Để giải thích chi tiết hơn về loại dữ liệu mà ứng dụng của bạn truy cập, cũng như thời điểm truy cập, hãy xử lý các thông tin bổ sung mà hệ thống đưa vào khi gọi ý định sử dụng quyền:

Tuỳ thuộc vào bộ lọc ý định mà bạn thêm, người dùng sẽ thấy biểu tượng thông tin bên cạnh tên ứng dụng của bạn trên một số màn hình:

  • Nếu bạn thêm bộ lọc ý định chứa hành động VIEW_PERMISSION_USAGE, thì người dùng sẽ thấy biểu tượng trên trang quyền của ứng dụng trong phần cài đặt hệ thống. Bạn có thể áp dụng hành động này cho tất cả quyền trong thời gian chạy.
  • Nếu bạn thêm bộ lọc ý định chứa hành động VIEW_PERMISSION_USAGE_FOR_PERIOD, thì người dùng sẽ thấy biểu tượng bên cạnh tên ứng dụng của bạn mỗi khi ứng dụng đó xuất hiện trên màn hình Bảng tổng quan về quyền riêng tư.

Khi người dùng chọn biểu tượng đó, hoạt động giải thích lý do của ứng dụng sẽ được bắt đầu.

Một hình chữ nhật góc tròn ở góc trên bên phải, trong đó
         có biểu tượng máy ảnh và biểu tượng micrô
Hình 2. Các chỉ báo máy ảnh và micrô, cho biết hoạt động truy cập dữ liệu gần đây.

Chỉ báo

Trên các thiết bị chạy Android 12 trở lên, khi một ứng dụng truy cập vào micrô hoặc máy ảnh, một biểu tượng sẽ xuất hiện trên thanh trạng thái. Nếu ứng dụng ở chế độ chìm, biểu tượng này sẽ xuất hiện ở góc trên bên phải màn hình. Người dùng có thể mở trình đơn Cài đặt nhanh và chọn biểu tượng để xem những ứng dụng nào đang sử dụng micrô hoặc máy ảnh. Hình 2 minh hoạ một ảnh chụp màn hình mẫu chứa các biểu tượng.

Xác định vị trí chỉ báo trên màn hình

Nếu ứng dụng của bạn hỗ trợ chế độ chìm hoặc giao diện người dùng toàn màn hình, thì các chỉ báo có thể tạm thời chồng lên giao diện người dùng của ứng dụng. Để giúp điều chỉnh giao diện người dùng cho phù hợp với các chỉ báo này, hệ thống sẽ đưa ra phương thức getPrivacyIndicatorBounds(). Đoạn mã sau đây minh hoạ phương thức đó. Nhờ sử dụng API này, bạn có thể xác định những ranh giới nơi chỉ báo có thể xuất hiện. Sau đó, bạn có thể quyết định sắp xếp giao diện người dùng của màn hình theo cách khác.

Kotlin

view.setOnApplyWindowInsetsListener { view, windowInsets ->
    val indicatorBounds = windowInsets.getPrivacyIndicatorBounds()
    // change your UI to avoid overlapping
    windowInsets
}

Tuỳ chọn bật/tắt

Các ô trong trình đơn Cài đặt nhanh được gắn nhãn &quot;Quyền truy cập vào máy ảnh&quot; và
         &quot;Quyền truy cập vào micrô&quot;
Hình 3. Tuỳ chọn bật/tắt micrô và máy ảnh trong trình đơn Cài đặt nhanh.

Trên các thiết bị được hỗ trợ chạy Android 12 trở lên, người dùng có thể bật/tắt quyền truy cập vào máy ảnh và micrô của tất cả ứng dụng trên thiết bị bằng cách nhấn vào một tuỳ chọn bật/tắt. Người dùng có thể truy cập vào các tuỳ chọn bật/tắt từ trình đơn Cài đặt nhanh, như minh hoạ trong hình 3, hoặc từ màn hình Quyền riêng tư trong phần cài đặt hệ thống.

Tuỳ chọn bật/tắt máy ảnh và micrô ảnh hưởng đến tất cả ứng dụng trên thiết bị:

  • Khi người dùng tắt quyền truy cập vào máy ảnh, ứng dụng của bạn sẽ nhận được một nguồn cấp dữ liệu máy ảnh trống.
  • Khi người dùng tắt quyền truy cập vào micrô, ứng dụng của bạn sẽ nhận được âm thanh im lặng. Ngoài ra, cảm biến chuyển động sẽ bị giới hạn tốc độ, bất kể bạn có khai báo quyền HIGH_SAMPLING_RATE_SENSORS hay không.

Khi người dùng tắt quyền truy cập vào máy ảnh hoặc micrô, sau đó chạy một ứng dụng cần quyền truy cập thông tin máy ảnh hoặc micrô, hệ thống sẽ nhắc người dùng rằng tuỳ chọn bật/tắt trên toàn thiết bị đang tắt.

Kiểm tra xem thiết bị có hỗ trợ không

Để kiểm tra xem thiết bị có hỗ trợ tuỳ chọn bật/tắt micrô và máy ảnh hay không, hãy thêm logic xuất hiện trong đoạn mã sau:

Kotlin

val sensorPrivacyManager = applicationContext
        .getSystemService(SensorPrivacyManager::class.java)
        as SensorPrivacyManager
val supportsMicrophoneToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.MICROPHONE)
val supportsCameraToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.CAMERA)

Java

SensorPrivacyManager sensorPrivacyManager = getApplicationContext()
        .getSystemService(SensorPrivacyManager.class);
boolean supportsMicrophoneToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.MICROPHONE);
boolean supportsCameraToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.CAMERA);