Android 6 이상의 런타임 권한은 사용자가 기기 마이크의 오디오나 기기 카메라의 동영상이 기록되도록 허용할지 여부를 제어할 수 있게 해 줍니다. 앱이 기록할 수 있으려면 사용자가 시스템에서 제공하는 대화상자를 통해 권한을 부여하거나 거부해야 합니다.
Android 12는 앱이 카메라 및 마이크 app-op 권한을 통해 개인 정보 데이터 소스를 사용하는 경우 표시기를 표시하여 사용자에게 투명성을 제공합니다. app-op는 런타임 권한으로 보호되는 API로의 액세스를 기록합니다.
app-op는 활동 상태와 개별 API 호출의 개수를 추적하고, Android 12의 마이크 및 카메라 표시기와 상호작용하여 앱이 기기에서 오디오 및 카메라 데이터에 액세스한 경우 사용자에게 이를 알려줍니다. 사용자가 마이크 또는 카메라 표시기를 클릭하면 어느 앱이 데이터에 액세스했는지 확인할 수 있습니다. 이 기능은 모든 OEM의 필수 기능입니다.
표시기 표시 요구사항
Android 12 이상에서 실행되는 기기의 마이크 및 카메라 표시기 요구사항은 다음과 같습니다.
- 표시기는 상태 표시줄에 표시되어야 하며 가장 높은 표시 우선순위를 유지해야 합니다(예: 오른쪽 상단 모서리의 가장 오른쪽에 위치).
- 표시기는 일관성 있게 동일한 위치에 있어야 하며 실행 시 다른 앱으로 차단되면 안 됩니다.
- 두 표시기 모두 반드시 녹색(또는 녹색의 다른 버전)이어야 합니다.
- 하나 이상의 표시기를 클릭하면 반드시 다음을 실행하는 애플리케이션 기여 어포던스 알림을 렌더링해야 합니다.
- 마이크 또는 카메라를 사용하는 앱의 이름을 표시합니다.
- 최근 15초 안에 마이크 또는 카메라를 사용한 앱의 이름을 표시합니다.
- 사용자를 설정의 앱 권한 페이지로 안내합니다.
사용 및 기능
Android 12에서 UI가 실행 중인 사용과 최근 사용을 구분합니다. 시스템이 '사용 중'으로 표시했거나 실행된 지 5초가 지나지 않은 사용은 '활성'으로 간주됩니다.
- 상태 표시줄 아이콘은 앱에서 사용자에게 민감한 마이크 또는 카메라 액세스가 진행 중일 때마다 표시됩니다.
- 사용자는 이러한 아이콘을 클릭하여 어느 앱이 마이크, 카메라 또는 둘 다에 액세스 중인지 확인할 수 있습니다.
그림 1. 활성 액세스를 표시하는 마이크 및 카메라 사용 중 표시기(오른쪽 상단 모서리)
액세스는 표시기가 표시되어 있는 동안 활성 상태로 간주됩니다. 먼저 아이콘이 표시된 후 점으로 바뀌고 앱이 닫힐 때까지 지속됩니다.
사용자가 표시기를 탭하면 대화상자가 열리고 앱이 현재 카메라, 마이크 또는 둘 다를 사용 중임을 보여줍니다.
그림 2. 활성 및 최근 액세스 표시기
그림 2의 이미지는 실행 중인 앱이 직전 5초 이내에 데이터에 액세스한 경우의 활성 액세스 표시기를 보여줍니다.
최근 액세스 표시기는 직전 15초 이내에 앱이 데이터에 액세스했지만 지금은 이 앱이 활성 상태가 아님을 알려줍니다. 대화상자에는 모든 활성 앱이 표시되지만, 하나의 앱만 최근 액세스의 소스로 표시됩니다. 직전 15초 안에 둘 이상의 앱이 데이터에 액세스한 경우도 마찬가지입니다. 액세스 뷰는 사용자가 알림 대화상자를 닫을 때까지 고정된 상태로 유지됩니다.
전달 및 사용 설정
PermissionManager
클래스는 시스템 UI에 있는 대화상자를 채우는 메서드를 제공합니다.
- 시스템 UI는 기기 설정 스위치
privacy/mic_camera_indicators_enabled
에 반응합니다. - 이 스위치가 필요한 이유는 다음과 같은 순서대로 두 개의 개별적인 전달 수단이 있기 때문입니다.
- 전달
- 사용 설정
- 시스템 UI는
PermissionManager
의 메서드가 필요한 데이터를 제공하지 못하는 경우에도 비정상 종료되면 안 됩니다.
프로세스 흐름
권한 표시기 기능은 다음과 같은 세 가지 부분으로 구성됩니다.
- 앱
- 표시기(SystemUI에서 처리)
- 어느 앱이 데이터를 사용 중인지 확인할 방법
PermissionController
는 어느 앱이 데이터를 사용 중인지 확인하는 메커니즘을 제공합니다. SystemUI는 비공개 데이터를 사용하여 앱을 수신 대기합니다. SystemUI는 상단 탐색 메뉴에 사용된 권한에 대응하는 아이콘을 표시합니다. PermissionController
는 사용자가 아이콘을 클릭하면 사용 관련 데이터를 표시합니다.
그림 3. 시스템 구성요소 및 (UI) 전환 흐름
아래에서 그림 3의 번호가 매겨진 전환을 설명합니다.
1- 앱이 시스템에 비공개 데이터를 요청합니다.
2- 시스템이 권한을 확인합니다. 권한이 허용된 경우 시스템이 데이터 제공업체에 알림을 보내고 app-op에 사용을 기록합니다.
3- 데이터 제공업체가 앱에 데이터를 제공합니다.
4-5 사용자가 아이콘을 클릭합니다. 시스템 UI가 PermissionManager
에 데이터를 요청하고 사용자에게 대화상자를 표시합니다.
프로세스 세부정보
- 앱이 마이크와 카메라를 사용하여
AppOpsManager.startOp
,stopOp
및/또는noteOp
를 호출합니다. 그러면 시스템 서버에 app-op 레코드가 생성됩니다. - 시스템 UI가
AppOpsManager.OnOpActiveChangedInternalListener
및OnOpNotedListener
리스너를 사용하여 새로운 app-op를 수신 대기합니다.startOp
또는noteOp
호출을 통해 새로운 사용이 수신되면 시스템 UI가 이 사용이 시스템 앱에서 발생한 것인지 확인합니다. - 시스템 앱에서 발생한 것임이 확인되고 마이크가 사용된 경우, 시스템 UI가 마이크가 음소거되었는지 확인합니다.
- 비시스템 앱에서 발생한 것임이 확인되고 마이크가 사용된 경우에는 마이크가 음소거되었는지, 카메라가 사용된 경우에는 카메라가 설정되었는지 확인된 경우, 마이크 또는 카메라가 사용한 것임을 보여주는 아이콘을 표시합니다.
System UI가 지속 시간이 없는 noteOp
를 수신하면 최소 5초 동안 아이콘을 표시합니다. 그 밖의 경우에는 stopOp
가 수신될 때까지 또는 5초 동안(둘 중 더 긴 시간 동안) 아이콘을 표시합니다. 사용자가 아이콘을 클릭하면 인텐트가 시작되어 PermissionController
로 전달되고 대화상자가 시작됩니다.
PermissionController
가 마이크 및 카메라의 모든 최근 사용을 로드합니다. 이러한 사용 중 하나라도 현재 실행 중인지, 또는 시스템 UI에 의해 설정된 시간 내에 실행되고 있었는지 확인합니다. 일치하는 항목을 찾으면 권한을 사용한 앱의 이름과 앱이 사용한 권한을 표시합니다.
Android 12 이상에 적용된 이러한 변경사항으로 인해 일부 앱에서는 동작을 변경하거나 특수 동작을 구현해야 합니다.
전화통신이 Android Google 검색 앱(AGSA) 및 Google 모바일 서비스(GMS)와 작동하면서 (전화 통화에 사용되는 별도의 마이크 스택을 고려하기 위해) 권한 사용을 구현해야 합니다.