MediaSessionCompat: Android 12(S+) 대상 시 PendingIntent 생성 오류 해결하기
Android 12(API 레벨 31) 이상을 대상으로 하는 앱에서 MediaSessionCompat을 사용할 때 PendingIntent 생성과 관련된 오류가 발생할 수 있습니다. 이 글에서는 이 문제의 원인과 해결 방법을 상세히 알아보겠습니다.
1. 문제 상황
다음과 같은 오류 메시지가 나타납니다:
MediaSessionCompat: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
2. 주요 원인
- Android 12부터 PendingIntent 생성 시 명시적인 mutability 플래그 지정 요구
- MediaSessionCompat 라이브러리의 내부 구현 변경 필요성
- 기존 코드와 새로운 Android 버전 간의 호환성 문제
3. 해결 방법
3.1 라이브러리 업데이트
최신 버전의 androidx.media 라이브러리를 사용합니다:
implementation 'androidx.media:media:1.6.0'
3.2 PendingIntent 생성 시 플래그 추가
PendingIntent를 직접 생성하는 경우, 적절한 플래그를 추가합니다:
val flag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) PendingIntent.FLAG_IMMUTABLE else 0
val pendingIntent = PendingIntent.getActivity(context, 0, intent, flag)
3.3 MediaSessionCompat 초기화 수정
MediaSessionCompat 초기화 시 추가 설정을 적용합니다:
val mediaSession = MediaSessionCompat(context, "TAG").apply {
setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
setCallback(mediaSessionCallback)
setSessionActivity(pendingIntent) // 여기서 pendingIntent는 FLAG_IMMUTABLE로 생성된 것
}
4. 추가 팁
- targetSdkVersion을 일시적으로 30으로 낮추는 것도 임시 해결책이 될 수 있습니다.
- MediaSessionCompat의 소스 코드를 검토하여 내부적으로 PendingIntent를 어떻게 처리하는지 이해하는 것이 도움될 수 있습니다.
- Android 12 이상을 대상으로 하는 경우, 전반적인 앱의 PendingIntent 사용을 검토하고 필요한 경우 수정하세요.
결론
Android 12 이상을 대상으로 할 때 MediaSessionCompat 사용 시 발생하는 PendingIntent 관련 오류는 주로 새로운 보안 요구사항 때문입니다. 라이브러리 업데이트, 적절한 플래그 사용, 그리고 필요한 경우 코드 수정을 통해 이 문제를 해결할 수 있습니다. 지속적인 Android 플랫폼의 변화에 대응하기 위해 정기적으로 라이브러리를 업데이트하고 공식 문서를 참조하는 것이 중요합니다.