在Android Q中,用戶可以藉助氣泡,輕鬆地在設備上任何位置進行多任務處理。氣泡內置於“通知”系統中,它會浮動在其他應用的上層,並會跟隨用戶的移動而移動到屏幕的任何位置,用於取代SYSTEM_ALERT_WINDOW。氣泡可以展開顯示應用功能和信息,並在不使用時摺疊起來。當設備處於已鎖定狀態或始終保持活動狀態,氣泡會像通知那樣顯示。氣泡彈窗效果如下圖:
一、氣泡配置信息
氣泡是一種可以選擇停用的功能,在應用顯示第一個氣泡時,系統會彈出權限對話框,提供兩種選項:
- 屏蔽來自您的應用的所有氣泡 - 通知不會被屏蔽,但永遠不會顯示爲氣泡;
- 允許來自您的應用的所有氣泡 - 通過
BubbleMetaData
發送的所有通知都會顯示爲氣泡;
氣泡是通過Notification API創建的。我們如果要讓通知顯示氣泡效果,需要添加一些配置信息。因爲氣泡的展開視圖是根據選擇的Activity來創建的,此Activity需要經過配置才能顯示爲氣泡。此Activity必須是可以調整大小、嵌入式的,並始終可以在文檔模式界面下啓動。如下代碼是氣泡Activity的配置:
<activity
android:name=".BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:documentLaunchMode="always"
android:resizeableActivity="true"
/>
二、發送氣泡
要發送氣泡,需要執行如下步驟:
- 按照一般步驟創建通知;
- 調用
Notification.BubbleMetadata.Builder
以創建 BubbleMetadata 對象; - 使用
setBubbleMetadata
將元數據添加到通知;
發送氣泡的實例代碼如下:
// 創建氣泡intent
Intent target = new Intent(mContext, BubbleActivity.class);
PendingIntent bubbleIntent =
PendingIntent.getActivity(mContext, 0, target, 0 /* flags */);
// 創建氣泡元數據
Notification.BubbleMetadata bubbleData =
new Notification.BubbleMetadata.Builder()
.setDesiredHeight(600)
// Note: although you can set the icon is not displayed in Q Beta 2
.setIcon(Icon.createWithResource(context, R.drawable.icon))
.setIntent(bubbleIntent)
.build();
// 創建通知
Person chatBot = new Person.Builder()
.setBot(true)
.setName("BubbleBot")
.setImportant(true)
.build();
Notification.Builder builder =
new Notification.Builder(mContext, CHANNEL_ID)
.setContentIntent(contentIntent)
.setSmallIcon(smallIcon)
.setBubbleMetadata(bubbleData);
三、創建展開的氣泡
我們可以將氣泡配置爲自動展開顯示,可以使用以下方法來設置用於啓用這些行爲的標記:setAutoExpandBubble()和
setSuppressInitialNotification()。
Java實例代碼如下:
Notification.BubbleMetadata bubbleData =
new Notification.BubbleMetadata.Builder()
.setDesiredHeight(600)
.setIntent(bubbleIntent)
.setAutoExpandBubble(true)
.setSuppressInitialNotification(true)
.build();
kotlin實例代碼如下:
val bubbleMetadata = Notification.BubbleMetadata.Builder()
.setDesiredHeight(600)
.setIntent(bubbleIntent)
.setAutoExpandBubble(true)
.setSuppressInitialNotification(true)
.build()