휴대전화와 마찬가지로 오디오 안경 및 디스플레이 안경에서 카메라 및 마이크와 같은 민감한 하드웨어에 액세스하려면 명시적인 사용자 동의가 필요합니다. 이러한 권한은 안경 관련 권한으로 간주되며 앱에 휴대전화에 상응하는 권한이 이미 있는 경우에도 런타임에 요청해야 합니다.
앱 매니페스트에서 권한 선언
권한을 요청하기 전에 앱의 매니페스트 파일에서 권한을 선언
해야 합니다. <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 } }
코드에 관한 주요사항
- 코드는
ActivityResultLauncher를 사용하여ProjectedPermissionsResultContract메서드를 만듭니다. 콜백은 권한 이름과 부여된 상태의 맵을 수신합니다. - 앱에 필요한 권한(예:
Manifest.permission.CAMERA또는Manifest.permission.RECORD_AUDIO)을 지정해야 합니다.
요청 함수 만들기
다음으로 앱의 권한 런처를 사용하여 런타임에 사용자에게 권한을 요청하는 함수를 만듭니다.
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 메서드를 사용하여 권한 요청을 실행하면 시스템은 안경과 휴대전화 모두에서
조정된 사용자 흐름을 시작합니다.
권한 사용자 흐름 중에 앱과 사용자가 기대할 수 있는 사항은 다음과 같습니다.
글라스: 예측된 기기 (글라스)에 활동이 표시되어 사용자에게 계속 진행하려면 휴대전화를 보라고 안내합니다.
휴대전화: 동시에 호스트 기기 (휴대전화)에서 활동이 실행됩니다. 이 화면에는 제공한 근거 문자열이 표시되고 사용자에게 계속 진행하거나 취소할 수 있는 옵션이 제공됩니다.
휴대전화: 사용자가 근거를 수락하면 수정된 Android 시스템 권한 대화상자가 휴대전화에 표시되어 사용자에게 권한을 부여하는 대상이 휴대전화가 아닌 안경이라고 알리고 사용자는 권한을 공식적으로 부여하거나 거부할 수 있습니다.
결과 수신: 사용자가 최종 선택을 하면 휴대전화와 글라스의 활동이 모두 종료됩니다. 그러면 요청된 각 권한의 부여된 상태가 포함된 맵으로 Your
ActivityResultLaunchercallback이 호출됩니다.