오디오 글래스 및 디스플레이 글래스의 하드웨어 권한 요청

적용 가능한 XR 기기
이 가이드는 이러한 유형의 XR 기기를 위한 환경을 빌드하는 데 도움이 됩니다.
오디오 및
디스플레이 안경

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

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

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

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

권한 런처 등록

오디오 글라스 및 디스플레이 글라스에 대한 권한을 요청하려면 먼저 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()
}

코드에 관한 주요사항

권한 요청 사용자 흐름 이해

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

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

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

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

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

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