對話框可讓使用者輕鬆查看和參與對話。
對話框內建在通知系統中,浮動於其他應用程式上方 並跟著使用者移動使用者可以展開對話框來查看內容 與應用程式內容互動
當裝置處於鎖定狀態或啟用螢幕長亮模式時,對話框會顯示 正常通知。
對話框是選用功能。如果應用程式顯示第一個泡泡, 權限對話方塊提供兩個選項:
- 封鎖應用程式中的所有對話框。通知未封鎖,但通知會予以封鎖 一律不會顯示為泡泡形式顯示。
- 允許應用程式的所有對話框。所有通知都會透過以下應用程式傳送:
「
BubbleMetaData
」會以泡泡形式顯示。
泡泡 API
對話框是由通知 API 建立,因此傳送通知時: 一般。如要以對話框形式顯示通知,請附加其他資料 先前提過 執行個體對於分配到的外部 IP 位址一無所知
對話框的展開檢視畫面是根據您選擇的活動建立。 設定活動,以泡泡形式正確顯示。活動必須是 可調整大小和 嵌入。如果缺少 而是以通知的形式呈現。
以下程式碼示範如何實作對話框:
<activity
android:name=".bubbles.BubbleActivity"
android:theme="@style/AppTheme.NoActionBar"
android:label="@string/title_activity_bubble"
android:allowEmbedded="true"
android:resizeableActivity="true"
/>
如果您的應用程式顯示多個同類型的對話框 (例如多個即時通訊),
和不同聯絡人的對話,則活動必須能夠啟動
多個執行個體在搭載 Android 10 以下版本的裝置上,
除非您明確設定通知,否則通知不會以對話框形式顯示
documentLaunchMode
到
"always"
。從 Android 11 開始,您不必明確
設定此值,因為系統會自動設定所有對話
documentLaunchMode
到 "always"
。
如要傳送對話框,請按照下列步驟操作:
- 以自己的身分建立通知 正常運作。
- 呼叫
BubbleMetadata.Builder(PendingIntent, Icon)
或BubbleMetadata.Builder(String)
。 來建立BubbleMetadata
物件 - 使用
setBubbleMetadata()
敬上 將中繼資料加入通知。 - 如果指定 Android 11 以上版本,請確認對話框 中繼資料或通知提及共用捷徑。
相關步驟如以下範例所示..
Kotlin
// Create a bubble intent. val target = Intent(context, BubbleActivity::class.java) val bubbleIntent = PendingIntent.getActivity(context, 0, target, 0 /* flags */) val category = "com.example.category.IMG_SHARE_TARGET" val chatPartner = Person.Builder() .setName("Chat partner") .setImportant(true) .build() // Create a sharing shortcut. val shortcutId = generateShortcutId() val shortcut = ShortcutInfo.Builder(mContext, shortcutId) .setCategories(setOf(category)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel(chatPartner.name) .build() // Create a bubble metadata. val bubbleData = Notification.BubbleMetadata.Builder(bubbleIntent, Icon.createWithResource(context, R.drawable.icon)) .setDesiredHeight(600) .build() // Create a notification, referencing the sharing shortcut. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setBubbleMetadata(bubbleData) .setShortcutId(shortcutId) .addPerson(chatPartner)
Java
// Create a bubble intent. Intent target = new Intent(mContext, BubbleActivity.class); PendingIntent bubbleIntent = PendingIntent.getActivity(mContext, 0, target, 0 /* flags */); private val CATEGORY_TEXT_SHARE_TARGET = "com.example.category.IMG_SHARE_TARGET" Person chatPartner = new Person.Builder() .setName("Chat partner") .setImportant(true) .build(); // Create a sharing shortcut. private String shortcutId = generateShortcutId(); ShortcutInfo shortcut = new ShortcutInfo.Builder(mContext, shortcutId) .setCategories(Collections.singleton(CATEGORY_TEXT_SHARE_TARGET)) .setIntent(Intent(Intent.ACTION_DEFAULT)) .setLongLived(true) .setShortLabel(chatPartner.getName()) .build(); // Create a bubble metadata. Notification.BubbleMetadata bubbleData = new Notification.BubbleMetadata.Builder(bubbleIntent, Icon.createWithResource(context, R.drawable.icon)) .setDesiredHeight(600) .build(); // Create a notification, referencing the sharing shortcut. Notification.Builder builder = new Notification.Builder(mContext, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setBubbleMetadata(bubbleData) .setShortcutId(shortcutId) .addPerson(chatPartner);
如果應用程式在傳送對話框時位於前景,系統就會忽略重要性 除非使用者封鎖對話框或通知,否則對話框會一律顯示 即可。
建立展開的對話框
您可以設定讓對話框自動以展開狀態顯示。三 建議您只在 畫面上就會顯示對話框,例如輕觸按鈕開始新的對話。在本例中 此外,如果是在顯示對話框時 已建立。
您可以使用以下方法設定標記來啟用這些行為:
setAutoExpandBubble()
敬上
和
setSuppressNotification()
。
以下範例說明如何設定讓對話框自動顯示 處於展開狀態時:
Kotlin
val bubbleMetadata = Notification.BubbleMetadata.Builder() .setDesiredHeight(600) .setIntent(bubbleIntent) .setAutoExpandBubble(true) .setSuppressNotification(true) .build()
Java
Notification.BubbleMetadata bubbleData = new Notification.BubbleMetadata.Builder() .setDesiredHeight(600) .setIntent(bubbleIntent) .setAutoExpandBubble(true) .setSuppressNotification(true) .build();
對話框內容生命週期
對話框展開時,內容活動會完成正常程序 生命週期內,因此 並成為前景程序 (如果尚未執行的話)。
當使用者收合或關閉泡泡時,系統就會刪除活動。這可能會 視 應用程式有其他正在執行的前景元件。
對話框顯示時機
為減少對使用者的干擾,對話框只會在特定底下顯示 情況。
如果應用程式指定 Android 11 或以上版本為目標,則不會收到通知 以對話框形式顯示,除非標籤符合對話框 需求。如果應用程式指定 如果裝置搭載 Android 10 以下版本,只有在下列情況中,通知才會以對話框形式顯示: 符合下列一或多項條件:
- 通知使用
MessagingStyle
和 已新增Person
。 - 通知是因來電
Service.startForeground
、 有category
。 /CATEGORY_CALL
和 新增了Person
。 - 通知傳送時,應用程式位於前景。
如果未符合上述任一條件,系統就會顯示通知,而不是 泡泡。
透過對話框啟動活動
對話框啟動新活動時,系統會啟動新活動 相同工作和同一個泡泡視窗,或是在新工作中 收合的泡泡。
如何在與泡泡相同的工作中啟動新活動:
1.使用活動情境來啟動意圖
activity.startActivity(intent)
和
1.請勿在意圖上設定 FLAG_ACTIVITY_NEW_TASK
旗標。
否則,新活動會在新工作中開始,對話框則 已收合。
請記住,對話框代表特定對話,因此活動 對話框中啟動的選項應與該對話相關此外, 在對話框中啟動活動,增加泡泡的工作堆疊 甚至可能使使用者體驗變差 導覽。
最佳做法
- 只在收到重要通知時才以對話框形式傳送通知,例如當通知處於 持續通訊的一部分,或是使用者明確要求以對話框形式顯示 內容。對話框會使用螢幕空間,並覆蓋其他應用程式內容。
- 確認對話框通知也能正常運作。時間 使用者停用對話框,但泡泡通知正常顯示 通知。
- 在覆寫時呼叫
super.onBackPressed
泡泡中的onBackPressed
活動。否則對話框可能無法正常運作。
收合的泡泡收到新訊息時,對話框會顯示標記 圖示表示未讀訊息。當使用者在 請按照下列步驟操作:
- 更新
BubbleMetadata
以隱藏通知,致電BubbleMetadata.Builder.setSuppressNotification()
。 這樣會移除標記圖示,表示使用者與訊息互動。 - 組合
Notification.Builder.setOnlyAlertOnce()
敬上 給true
,抑制BubbleMetadata
隨附的音效或震動 更新。
範例應用程式
人物 範例應用程式是使用對話框的對話應用程式。為了示範 這個應用程式使用聊天機器人。在實際應用程式中,以對話框形式顯示 人類。