위치, 마이크, 카메라와 관련된 권한은 앱에게 사용자에 관한 특히 민감한 정보에 액세스할 수 있는 권한을 부여합니다. 플랫폼에는 이 페이지에 설명된 몇 가지 메커니즘이 포함되어 있어 사용자가 최신 정보를 확인하고 어떤 앱이 위치, 마이크, 카메라에 액세스할 수 있는지 제어할 수 있게 해줍니다.
이러한 개인 정보 보호 시스템 기능은 개인 정보 보호 권장사항을 준수하는 한 앱에서 위치, 마이크 및 카메라와 관련된 권한을 처리하는 방식에 영향을 미치지 않습니다.
특히 앱에서 메커니즘을 따르도록 해야 합니다.
- 사용자가 앱에
CAMERA
권한을 부여할 때까지 기기의 카메라에 액세스하는 것을 기다립니다. - 사용자가 앱에
RECORD_AUDIO
권한을 부여할 때까지 기기의 마이크에 액세스하는 것을 기다립니다. - 사용자가 앱에서 위치 기능이 필요한 기능과 상호작용할 때까지 기다렸다가
ACCESS_COARSE_LOCATION
권한 또는ACCESS_FINE_LOCATION
권한을 요청할 수 있습니다(위치 정보 액세스 권한 요청 방법 가이드에 설명됨). - 사용자가
ACCESS_COARSE_LOCATION
권한 또는ACCESS_FINE_LOCATION
권한을 앱에 부여할 때까지 기다렸다가ACCESS_BACKGROUND_LOCATION
권한을 요청합니다.
개인 정보 대시보드
Android 12 이상을 실행하는 지원되는 기기에서는 개인 정보 대시보드 화면이 시스템 설정에 표시됩니다. 이 화면에서 사용자는 앱이 위치나 카메라, 마이크 정보에 액세스할 때 표시되는 별도의 화면에 액세스할 수 있습니다. 각 화면에는 여러 앱이 특정 유형의 데이터에 액세스한 시점의 타임라인이 표시됩니다. 그림 1은 위치 정보 데이터 액세스 타임라인을 보여줍니다.
데이터 액세스 근거 표시
앱은 사용자에게 앱이 위치나 카메라, 마이크 정보에 액세스하는 이유를 알 수 있도록 근거를 제공할 수 있습니다. 이 근거는 새 개인 정보 대시보드 화면이나 앱의 권한 화면 또는 둘 다에 표시될 수 있습니다.
앱이 위치와 카메라, 마이크 정보에 액세스하는 이유를 설명하려면 다음 단계를 완료하세요.
시작 시 앱이 특정 유형의 데이터 액세스 작업을 실행하는 이유에 관한 근거를 제공하는 활동을 추가합니다. 이 활동 내에서
android:permission
속성을START_VIEW_PERMISSION_USAGE
로 설정합니다.앱이 Android 12 이상을 타겟팅하는 경우 명시적으로
android:exported
속성 값을 정의해야 합니다.다음 인텐트 필터를 새로 추가된 활동에 추가합니다.
<!-- 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>
데이터 액세스 근거 활동에서 표시할 내용을 결정합니다. 예를 들어 앱의 웹사이트나 고객센터 도움말을 표시할 수 있습니다. 앱이 액세스하는 데이터 유형과 액세스 발생 시점에 관해 좀 더 자세히 설명하려면 시스템에서 권한 사용 인텐트를 호출할 때 포함되는 추가 항목을 처리하세요.
- 시스템이
ACTION_VIEW_PERMISSION_USAGE
를 호출하면 앱은EXTRA_PERMISSION_GROUP_NAME
값을 검색할 수 있습니다. - 시스템이
ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD
를 호출하면 앱은EXTRA_PERMISSION_GROUP_NAME
,EXTRA_ATTRIBUTION_TAGS
,EXTRA_START_TIME
,EXTRA_END_TIME
값을 검색할 수 있습니다.
- 시스템이
추가하는 인텐트 필터에 따라 사용자에게 특정 화면의 앱 이름 옆에 정보 아이콘이 표시됩니다.
VIEW_PERMISSION_USAGE
작업이 포함된 인텐트 필터를 추가하면 시스템 설정의 앱 권한 페이지에 아이콘이 표시됩니다. 이 작업은 모든 런타임 권한에 적용할 수 있습니다.VIEW_PERMISSION_USAGE_FOR_PERIOD
작업이 포함된 인텐트 필터를 추가하면 앱이 개인 정보 대시보드 화면에 표시될 때마다 앱 이름 옆에 아이콘이 표시됩니다.
사용자가 이 아이콘을 선택하면 앱의 근거 활동이 시작됩니다.
표시기
Android 12 이상을 실행하는 기기에서는 앱이 마이크나 카메라에 액세스할 때 상태 표시줄에 아이콘이 표시됩니다. 앱이 몰입형 모드이면 아이콘은 화면 오른쪽 상단에 표시됩니다. 사용자는 빠른 설정을 열고 아이콘을 선택하여 현재 마이크나 카메라를 사용하는 앱을 확인할 수 있습니다. 그림 2는 아이콘이 포함된 스크린샷을 보여주는 예입니다.
표시기의 화면 위치 식별
앱이 몰입형 모드 또는 전체 화면 UI를 지원하는 경우 표시기가 앱의 UI와 잠시 동안 겹칠 수 있습니다. 이러한 표시기에 맞게 UI를 조정하기 위해 시스템은 다음 코드 스니펫에서 보여주는 getPrivacyIndicatorBounds()
메서드를 도입합니다. 이 API를 사용하면 표시기가 표시될 수 있는 경계를 식별할 수 있습니다. 개발자는 화면 UI를 다르게 구성할 수 있습니다.
Kotlin
view.setOnApplyWindowInsetsListener { view, windowInsets -> val indicatorBounds = windowInsets.getPrivacyIndicatorBounds() // change your UI to avoid overlapping windowInsets }
전환
Android 12 이상을 실행하는 지원 기기에서 사용자는 단일 전환 옵션을 눌러 기기의 모든 앱에 카메라 및 마이크 액세스를 사용 설정하거나 사용 중지할 수 있습니다. 사용자는 그림3과 같이 빠른 설정에서 또는 시스템 설정의 개인 정보 보호 화면에서 전환 가능한 옵션에 액세스할 수 있습니다.
카메라 및 마이크 전환은 기기의 모든 앱에 영향을 미칩니다.
- 사용자가 카메라 액세스를 사용 중지하면 앱에서 빈 카메라 피드를 수신합니다.
사용자가 마이크 액세스를 사용 중지하면 앱에서 무음 오디오를 수신합니다. 또한
HIGH_SAMPLING_RATE_SENSORS
권한 선언 여부와 관계없이 움직임 감지 센서는 속도가 제한됩니다.
사용자가 카메라나 마이크 액세스를 사용 중지한 후 카메라나 마이크 정보에 액세스해야 하는 앱을 실행하면 시스템에서는 사용자에게 기기 전체 전환 버튼이 사용 중지되었다고 알립니다.
기기 지원 확인
기기에서 마이크 및 카메라 전환을 지원하는지 확인하려면 다음 코드 스니펫에 표시되는 로직을 추가하세요.
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);