AI 안경의 하드웨어 권한 요청

해당 XR 기기
이 가이드에서는 이러한 유형의 XR 기기를 위한 환경을 빌드하는 방법을 설명합니다.
AI 안경

휴대전화와 마찬가지로 AI 안경에서 카메라 및 마이크와 같은 민감한 하드웨어에 액세스하려면 명시적인 사용자 동의가 필요합니다. 이러한 권한은 안경 관련 권환으로 간주되며 앱에 휴대전화에 상응하는 권한이 이미 있더라도 런타임에 요청해야 합니다.

앱의 매니페스트에서 권한 선언

권한을 요청하기 전에 앱의 매니페스트 파일에서 권한을 선언 해야 합니다. <uses-permission> 요소를 사용하세요. 이 선언은 권한이 휴대전화 또는 AI 안경 관련 기능에 대한 것인지에 관계없이 동일하게 유지되지만 안경 관련 하드웨어 또는 기능에 대해 명시적으로 요청해야 합니다.

<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>

권한 런처 등록

AI 안경에 대한 권한을 요청하려면 먼저 ActivityResultLauncher와 함께 ProjectedPermissionsResultContract 메서드를 사용하여 권한 런처를 등록합니다.

// 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
        }
    }

코드 관련 주요 사항

요청 함수 만들기

다음으로 앱의 권한 런처를 사용하여 런타임에 사용자에게 권한을 요청하는 함수를 만듭니다.

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))
}

코드 관련 주요 사항

  • requestHardwarePermissions 함수는 ProjectedPermissionsRequestParams 객체를 빌드합니다. 이 객체는 앱에 필요한 권한 목록과 사용자에게 표시되는 근거를 번들로 묶습니다. 앱에 이러한 권한이 필요한 이유를 설명하기 위해 근거를 명확하고 간결하게 작성하세요.
  • 런처에서 launch를 호출하면 권한 요청 사용자 흐름이 트리거됩니다.
  • 앱은 런처의 콜백에서 부여된 결과와 거부된 결과를 모두 적절하게 처리해야 합니다.

권한 확인 함수 만들기

다음으로 사용자가 앱에 권한을 부여했는지 확인할 수 있는 함수를 만듭니다.

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

권한 요청 로직 추가

마지막으로 이러한 함수를 사용하여 런타임에 권한을 확인하고 요청하는 로직을 만듭니다.

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

코드 관련 주요 사항

  • 사용자가 이미 앱에 필요한 권한을 부여한 경우 initializeGlassesFeatures 함수가 호출되어 앱 환경을 초기화합니다. 이 함수는 AI 안경용 앱 활동의 일부로 정의됩니다.

권한 요청 사용자 흐름 이해

ProjectedPermissionsResultContract 메서드를 사용하여 권한 요청을 실행하면 시스템은 AI 안경과 휴대전화 모두에서 조정된 사용자 흐름을 시작합니다.

권한 사용자 흐름 중에 앱과 사용자가 기대할 수 있는 사항은 다음과 같습니다.

  1. AI 안경: 예측된 기기 (안경)에 활동이 표시되어 사용자에게 휴대전화를 보고 계속 진행하라고 안내합니다.

  2. 휴대전화: 동시에 호스트 기기 (휴대전화)에서 활동이 실행됩니다. 이 화면에는 제공한 근거 문자열이 표시되고 사용자에게 계속 진행하거나 취소할 수 있는 옵션이 제공됩니다.

  3. 휴대전화: 사용자가 근거를 수락하면 수정된 Android 시스템 권한 대화상자가 휴대전화에 표시되어 사용자에게 권한을 휴대전화가 아닌 AI 안경 기기에 부여하고 있음을 알립니다. 사용자는 권한을 공식적으로 부여하거나 거부할 수 있습니다.

  4. 결과 수신: 사용자가 최종 선택을 하면 휴대전화와 AI 안경의 활동이 모두 종료됩니다. Your ActivityResultLauncher 콜백은 그런 다음 요청된 각 권한의 부여된 상태가 포함된 맵으로 호출됩니다.