동작 변경사항: Android 13 이상을 타겟팅하는 앱

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이전 버전과 마찬가지로 Android 13에는 앱에 영향을 미칠 수 있는 동작 변경사항이 포함되어 있습니다. 다음 동작 변경사항은 Android 13 이상을 타겟팅하는 앱에만 적용됩니다. 앱이 Android 13 이상을 타겟팅한다면 이러한 동작을 올바르게 지원하도록 앱을 수정해야 합니다(적용되는 경우).

Android 13에서 실행되는 모든 앱에 영향을 주는 동작 변경사항의 목록도 검토하시기 바랍니다.

개인 정보 보호

알림 권한이 포그라운드 서비스 모양에 영향을 줌

사용자가 알림 권한을 거부할 경우 FGS(포그라운드 서비스) 작업 관리자에서는 이러한 포그라운드 서비스와 관련된 알림을 볼 수 있지만 알림 창에서는 알림을 볼 수 없습니다.

근처 Wi-Fi 기기의 새 런타임 권한

이전 버전의 Android에서는 사용자가 핫스팟과 Wi-Fi Direct 연결, Wi-Fi RTT 등과 관련된 일반적인 여러 Wi-Fi 사용 사례를 완료하려면 앱에 ACCESS_FINE_LOCATION 권한을 부여해야 합니다.

사용자가 위치 정보 액세스 권한을 Wi-Fi 기능과 연결하기는 어려우므로 Android 13(API 수준 33)에서는 Wi-Fi를 통해 근처 액세스 포인트에 대한 기기의 연결을 관리하는 앱을 위해 NEARBY_DEVICES 권한 그룹의 새로운 런타임 권한을 도입했습니다. 이 NEARBY_WIFI_DEVICES 권한은 이러한 Wi-Fi 사용 사례를 충족합니다.

앱이 Wi-Fi API에서 물리적 위치 정보를 얻지 않는 한 Android 13 이상을 타겟팅하고 Wi-Fi API를 사용할 때 ACCESS_FINE_LOCATION 대신 NEARBY_WIFI_DEVICES를 요청하세요. 이 프로세스는 Android 12(API 수준 31)에서 블루투스 기기 정보가 위치에 사용되지 않는다고 어설션할 때 실행하는 프로세스와 유사합니다.

근처 Wi-Fi 기기 권한에 관해 자세히 알아보세요.

세분화된 미디어 권한

허용 및 허용 안 함이라는 대화상자의 버튼 2개(위에서 아래로)
그림 1. READ_MEDIA_AUDIO 권한을 요청할 때 사용자에게 표시되는 시스템 권한 대화상자

앱이 Android 13을 타겟팅하는 경우 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 권한 대신 새 권한을 하나 이상 요청해야 합니다.

요청하는 권한 세트는 앱에서 액세스해야 하는 미디어 유형에 따라 다릅니다.

미디어 유형 요청 권한
이미지 및 사진 READ_MEDIA_IMAGES
동영상 READ_MEDIA_VIDEO
오디오 파일 READ_MEDIA_AUDIO

사용자가 이전에 READ_EXTERNAL_STORAGE 권한을 앱에 부여한 경우 시스템은 각각의 새 권한을 앱에 자동으로 부여합니다.

그 외의 경우에는 앱이 이전 표에 표시된 권한을 요청할 때 시스템에서 사용자에게 표시되는 대화상자를 표시합니다. 그림 1에서 앱은 READ_MEDIA_AUDIO 권한을 요청합니다. READ_MEDIA_IMAGES 권한과 READ_MEDIA_VIDEO 권한을 동시에 모두 요청하면 시스템 권한 대화상자가 하나만 표시됩니다.

Android 13을 타겟팅하는 경우 이전 단계

Android 13을 타겟팅한 후 앱에 필요한 미디어 권한을 선언합니다. 이전 버전의 Android와 호환성을 유지하려면 다음 코드 스니펫과 같이 maxSdkVersion32로 설정하면서 READ_EXTERNAL_STORAGE 권한을 선언하세요.

<manifest ...>
    <!-- Required only if your app targets Android 13. -->
    <!-- Declare one or more the following permissions only if your app needs
    to access data that's protected by them. -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

    <!-- Required to maintain app compatibility. -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

백그라운드에서 생체 신호 센서를 사용하려면 새로운 권한이 필요함

Android 13에서는 심박수, 체온, 혈중 산소 농도와 같은 생체 신호 센서에 '사용 중인 동안' 액세스라는 개념이 도입되었습니다. 이 액세스 모델은 Android 10 (API 수준 29)의 위치에 도입되었던 액세스 모델과 매우 유사합니다.

앱이 Android 13을 타겟팅하며 백그라운드에서 실행되는 동안 생체 신호 센서 정보에 액세스해야 하는 경우, 기존 BODY_SENSORS 권한에 더해 새로운 BODY_SENSORS_BACKGROUND 권한을 선언해야 합니다.

보안

인텐트 필터가 일치하지 않는 인텐트를 차단함

앱이 Android 13 이상을 타겟팅하는 다른 앱의 내보낸 구성요소로 인텐트를 전송하면 이 인텐트는 수신 앱의 <intent-filter> 요소와 일치하는 경우에만 전달됩니다. 일치하지 않는 인텐트는 차단됩니다.

인텐트 일치가 적용되지 않는 예외는 다음과 같습니다.

  • 인텐트 필터를 선언하지 않는 구성요소에 전달된 인텐트
  • 동일한 앱 내에서 발생한 인텐트
  • 시스템에서 발생한 인텐트. 즉, '시스템 UID'(uid=1000)에서 전송되는 인텐트입니다. 시스템 앱에는 android:sharedUserIdandroid.uid.system으로 설정하는 앱과 system_server가 포함됩니다.
  • 루트에서 발생한 인텐트

수신 앱이 Android 13 이상으로 업그레이드되는 경우 외부 앱에서 발생한 모든 인텐트는 발신 앱의 타겟 SDK 버전과 관계없이, 선언된 <intent-filter> 요소와 일치하는 경우에만 내보낸 구성요소로 전달됩니다.

성능 및 배터리

배터리 리소스 사용률

사용자가 Android 13을 타겟팅하는 앱의 백그라운드 배터리 사용량을 '제한'하면 시스템이 브로드캐스트와 관련된 몇 가지 제한사항을 적용합니다.

Android 13에 도입된 배터리 리소스 사용률 기능에 관해 설명하는 페이지에서 제한된 백그라운드 배터리 사용량에 관한 새로운 제한사항에 관해 자세히 알아보세요.

사용자 환경

PlaybackState에서 파생된 미디어 컨트롤

Android 13(API 수준 33) 이상을 타겟팅하는 앱의 경우 시스템은 PlaybackState 작업에서 미디어 컨트롤을 가져옵니다. 이를 통해 시스템은 스마트폰과 태블릿 기기 사이에 기술적으로 일관된 더 풍부한 컨트롤 세트를 표시할 수 있고 Android Auto 및 Android TV와 같은 다른 Android 플랫폼에서 미디어 컨트롤이 렌더링되는 방식과도 일치할 수 있습니다.

그림 2는 스마트폰과 태블릿 기기에서 각각 어떻게 표시되는지 보여줍니다.

스마트폰과 태블릿 기기에 표시되는 방식과 관련된 미디어 컨트롤. 버튼이 표시될 수 있는 방식을 보여주는 샘플 트랙의 예시를 사용함
그림 2: 스마트폰과 태블릿 기기의 미디어 컨트롤

Android 13 전에는 시스템이 MediaStyle 알림에서 작업이 추가된 순서대로 최대 5개의 작업을 표시했습니다. 압축 모드(예: 축소된 빠른 설정)에서는 setShowActionsInCompactView()로 지정된 작업이 최대 3개까지 표시되었습니다.

Android 13부터 시스템은 다음 표에 설명된 대로 PlaybackState를 기반으로 작업 버튼을 최대 5개 표시합니다. 압축 모드에서는 처음 3개의 작업 슬롯만 표시됩니다. Android 13을 타겟팅하지 않거나 PlaybackState를 포함하지 않는 앱의 경우 시스템은 MediaStyle 알림에 추가된 Action 목록에 기반하여 컨트롤을 표시합니다(이전 단락에서 설명).

슬롯 작업 기준
1 재생 PlaybackState의 현재 상태는 다음 중 하나입니다.
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
로딩 스피너 PlaybackState의 현재 상태는 다음 중 하나입니다.
  • STATE_CONNECTING
  • STATE_BUFFERING
일시중지 PlaybackState의 현재 상태는 위에 없습니다.
2 이전 PlaybackState 작업에는 ACTION_SKIP_TO_PREVIOUS가 포함됩니다.
맞춤식 PlaybackState 작업에는 ACTION_SKIP_TO_PREVIOUS가 포함되지 않고 PlaybackState 맞춤 작업에는 아직 배치되지 않은 맞춤 작업이 포함됩니다.
비어 있음 PlaybackState extras에는 SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV 키의 true 불리언 값이 포함됩니다.
3 다음 PlaybackState 작업에는 ACTION_SKIP_TO_NEXT가 포함됩니다.
맞춤식 PlaybackState 작업에는 ACTION_SKIP_TO_NEXT가 포함되지 않고 PlaybackState 맞춤 작업에는 아직 배치되지 않은 맞춤 작업이 포함됩니다.
비어 있음 PlaybackState extras에는 SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT 키의 true 불리언 값이 포함됩니다.
4 맞춤식 PlaybackState 맞춤 작업에는 아직 배치되지 않은 맞춤 작업이 포함됩니다.
5 맞춤식 PlaybackState 맞춤 작업에는 아직 배치되지 않은 맞춤 작업이 포함됩니다.

맞춤 작업은 PlaybackState에 추가된 순서대로 배치됩니다.