[Android] Bubbles 맛보기
Android API 30 (11.0) 부터 추가될 UI
2020/03/02 기준으로 작성됨
공식 문서 : Bubbles
- SYSTEM_ALERT_WINDOW 를 대체하는 멀티태스킹을 위한 기능
- Notification 의 특수한 형태
- opt-out (always on screen 기능을 끌 수 있고, 이 경우 일반적인 Notification으로 대체)
Notification API를 이용해서 만들어 지고, bubble을 만들기 위해서 추가적인 메타데이터를 붙여야 한다.
bubble을 누르면 나오는 확장 뷰는 액티비티로 만들어진다.
이 확장 뷰 용 액티비티는 manifest.xml 의 activity 태그에서 아래와 같이 3가지 속성을 모두 가져야 한다.
android:allowEmbedded="true"
android:documentLaunchMode="always"
android:resizeableActivity="true"
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:documentLaunchMode="always"
android:resizeableActivity="true"
/>
- notification을 일반적인 방식으로 만든다.
- Notification.BubbleMetadata.Builder 를 호출해서 BubbleMetadata 객체를 만든다.
- setBubbleMetadata 를 이용해 notification 에 메타데이터를 추가한다.
val target = Intent(context, BubbleActivity::class.java)
val bubbleIntent = PendingIntent.getActivity(context, 0, target, 0 )
val bubbleData = Notification.BubbleMetadata.Builder()
.setDesiredHeight(600)
.setIcon(Icon.createWithResource(context, R.drawable.icon))
.setIntent(bubbleIntent)
.build()
val chatBot = Person.Builder()
.setBot(true)
.setName("BubbleBot")
.setImportant(true)
.build()
val builder = Notification.Builder(context, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setBubbleMetadata(bubbleData)
.addPerson(chatBot)
val bubbleMetadata = Notification.BubbleMetadata.Builder()
.setDesiredHeight(600)
.setIntent(bubbleIntent)
.setAutoExpandBubble(true)
.setSuppressInitialNotification(true)
.build()
setAutoExpandBubble()
setSuppressInitialNotification()
두 메소드를 활용해서 확장된 Bubble을 만든다.
bubble이 확장되면 확장 뷰 액티비티가 foreground process가 되고 일반적인 process life 생명주기를 따라간다.
bubble이 없어지거나, 확장 뷰가 사라지면 확장 뷰 액티비티가 파괴된다.
UI 인터럽트가 발생하기 때문에 정말 필요할 때만 사용해야 함