본문 바로가기

Dev/안드로이드

[안드로이드 짤막공부] 23.08.22

1. 안드로이드 13을 탑재한 가상 머신의 오디오가 정상적으로 출력이 되지 않는 문제가 있었다. 더 낮은 레벨의 안드로이드 머신들에서는 정상적으로 출력되는데, 처음에는 디바이스 세팅 문제인가 싶어 꽤 헤맸다.

도저히 내 문제가 아닌 거 같아서 찾아보니

issuetracker.google.com

 꽤나 오래 묵은 문제인 거 같았다. 그래서 포기하고 더 낮은 API레벨의 안드로이드로 테스트하려던 찰나에

 

 마침 오늘자 당장 몇 시간 전 코멘트로 저런 게 있길래, 안드로이드 스튜디오 내에서 sdk를 업데이트해 주고 새 기기를 만들어 실행하니 오디오가 정상적으로 출력됐다. 코멘트가 올라온 타이밍이 예술이었다.

 

2. Foreground Service와 Notification을 이용한 음악 플레이어를 구현하고 있었는데, 만든 Notification에 대해 setContentIntent()를 하면서 문제가 생겼다.

val mainPendingIntent = PendingIntent.getActivity(
    baseContext,
    0,
    Intent(baseContext, MainActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK },
    PendingIntent.FLAG_IMMUTABLE
)

 강의 내용처럼 인자로 넣을 PendingIntent를 위와 같이 구현했는데 자꾸 메인 액티비티가 중복으로 나타났다. 처음 강의 내용에서는 Intent의 flag를 Intent.FLAG_ACTIVITY_SINGLE_TOP으로 주고 있었기에 flag 문제인가 싶어 위처럼 FLAG_ACTIVITY_NEW_TASK로 변경해 보았으나 고쳐지지 않았다.

 실행 중인 앱에서 서비스를 실행한 뒤, 앱을 스와이프 하여 종료 후 Notification을 터치해 실행하면 메인 액티비티가 하나만 존재하는 것으로 보아 다른 문제는 아니고 모종의 이유로 Flag가 제대로 적용이 안 되는 것 같았다.  혹시나 싶어 메인 액티비티를 띄워 둔 상태에서 Notification을 여러 번 누르니 그만큼 액티비티가 생성되었다..ㅋㅋㅋ
 그래서 그냥 런타임에 Flag 설정하는 부분을 빼버리고 manifest 쪽에서 MainActivity에 대해 launchMode를 singleTask로 설정해서 문제를 해결했다.
 문제는 해결했으나, 왜 Flag 설정만으로 의도한 대로 동작하지 않았는지는 끝내 알아내지 못해서 영 찝찝하다. 좀 더 공부를 하다 보면 알게 되려나.