Yêu cầu cấp quyền truy cập phần cứng cho kính AI

Các thiết bị XR được hỗ trợ
Hướng dẫn này giúp bạn xây dựng các trải nghiệm cho những loại thiết bị XR sau.
Kính AI

Cũng giống như trên điện thoại, việc truy cập vào phần cứng nhạy cảm như camera và micrô trên kính AI đòi hỏi phải có sự đồng ý rõ ràng của người dùng. Đây được coi là các quyền dành riêng cho kính và ứng dụng của bạn phải yêu cầu các quyền này trong thời gian chạy, ngay cả khi ứng dụng đã có các quyền tương ứng trên điện thoại.

Khai báo các quyền trong tệp kê khai của ứng dụng

Trước khi yêu cầu cấp quyền, bạn phải khai báo các quyền đó trong tệp kê khai của ứng dụng bằng phần tử <uses-permission>. Khai báo này vẫn giữ nguyên cho dù quyền đó là cho một tính năng dành riêng cho điện thoại hay kính AI, nhưng bạn vẫn phải yêu cầu quyền đó một cách rõ ràng đối với phần cứng hoặc chức năng dành riêng cho kính.

<manifest ...>
    <!-- Only declare permissions that your app actually needs. In this example,
    we declare permissions for the camera. -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

Đăng ký trình chạy quyền

Để yêu cầu cấp quyền cho kính AI, trước tiên, bạn phải sử dụng ActivityResultLauncher với phương thức ProjectedPermissionsResultContract để đăng ký trình chạy quyền.

// Register the permissions launcher using the ProjectedPermissionsResultContract.
private val requestPermissionLauncher: ActivityResultLauncher<List<ProjectedPermissionsRequestParams>> =
    registerForActivityResult(ProjectedPermissionsResultContract()) { results ->
        if (results[Manifest.permission.CAMERA] == true) {
            isPermissionDenied = false
            initializeGlassesFeatures()
        } else {
            // Handle permission denial.
            isPermissionDenied = true
        }
    }

Các điểm chính về mã

Tạo hàm yêu cầu

Tiếp theo, bạn sẽ tạo một hàm sử dụng trình chạy quyền của ứng dụng để yêu cầu người dùng cấp quyền khi bắt đầu chạy.

private fun requestHardwarePermissions() {
    val params = ProjectedPermissionsRequestParams(
        permissions = listOf(Manifest.permission.CAMERA),
        rationale = "Camera access is required to overlay digital content on your physical environment."
    )
    requestPermissionLauncher.launch(listOf(params))
}

Các điểm chính về mã

  • Hàm requestHardwarePermissions tạo một đối tượng ProjectedPermissionsRequestParams. Đối tượng này kết hợp danh sách các quyền mà ứng dụng của bạn cần và lý do mà người dùng thấy được. Giải thích rõ ràng và ngắn gọn lý do ứng dụng của bạn cần các quyền này.
  • Việc gọi launch trên trình chạy sẽ kích hoạt luồng người dùng yêu cầu cấp quyền.
  • Ứng dụng của bạn phải xử lý cả kết quả được cấp và bị từ chối một cách linh hoạt trong lệnh gọi lại của trình chạy.

Tạo hàm kiểm tra quyền

Tiếp theo, bạn sẽ tạo một hàm có thể kiểm tra xem người dùng đã cấp quyền cho ứng dụng của bạn hay chưa.

private fun hasCameraPermission(): Boolean {
    return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) ==
            PackageManager.PERMISSION_GRANTED
}

Thêm logic yêu cầu cấp quyền

Cuối cùng, hãy tạo logic sử dụng các hàm này để kiểm tra và yêu cầu các quyền trong thời gian chạy.

if (hasCameraPermission()) {
    initializeGlassesFeatures()
} else {
    requestHardwarePermissions()
}

Các điểm chính về mã

Tìm hiểu quy trình yêu cầu cấp quyền cho người dùng

Khi bạn khởi chạy một yêu cầu cấp quyền bằng phương thức ProjectedPermissionsResultContract, hệ thống sẽ bắt đầu một quy trình phối hợp cho người dùng trên cả kính AI và điện thoại.

Trong luồng người dùng cấp quyền, đây là những điều mà ứng dụng của bạn và người dùng có thể mong đợi:

  1. Trên kính AI: Một hoạt động xuất hiện trên thiết bị được chiếu (kính), hướng dẫn người dùng nhìn vào điện thoại để tiếp tục.

  2. Trên điện thoại: Đồng thời, một hoạt động sẽ khởi chạy trên thiết bị lưu trữ (điện thoại). Màn hình này hiển thị chuỗi lý do mà bạn cung cấp và cho phép người dùng chọn tiếp tục hoặc huỷ.

  3. Trên điện thoại: Nếu người dùng chấp nhận lý do, một hộp thoại cấp quyền hệ thống Android đã sửa đổi sẽ xuất hiện trên điện thoại để cho người dùng biết rằng họ đang cấp quyền cho thiết bị kính AI (không phải điện thoại) và người dùng có thể chính thức cấp hoặc từ chối quyền.

  4. Nhận kết quả: Sau khi người dùng đưa ra lựa chọn cuối cùng, các hoạt động trên cả điện thoại và kính AI sẽ bị loại bỏ. Sau đó, lệnh gọi lại ActivityResultLauncher của bạn sẽ được gọi bằng một bản đồ chứa trạng thái được cấp cho từng quyền được yêu cầu.