API Bubble của Android 11 cuối cùng cũng có mặt!

Tram Ho

Còn nhớ khoảng năm 2015 2016 gì đó tôi hay nghe thấy những request về làm một cái “quả bóng tròn” giống Facebook Messenger. Vâng, đúng rồi đấy ạ, chắc hẳn những ai dùng Facebook Messenger trên Android hẳn sẽ rất quen thuộc với 1 icon tròn nổi trên màn hình khi nhận được tin nhắn như hình dưới

Rất nhiều ý kiến đã được đưa ra để làm sao làm được như vậy, trong đó ý kiến phổ biến nhất là tạo ra một floating window nằm đè lên các app khác thông qua việc request SYSTEM_ALERT_WINDOW.
Tuy nhiên đây lại là một ý tưởng không được khuyến khích, theo như document của Android

Very few apps should use this permission; these windows are intended for system-level interaction with the user.
thì permission này vốn được dùng ở tầng hệ thống để tương tác với user.
Bẵng đi một thời gian, cho đến gần đây, thì cuối cùng Google cũng đã đưa tính năng hay ho này vào Android với tên gọi Bubble. Bắt đầu từ Android 10, developer đã có thể vọc thử tính năng này bằng cách enable Settings ▸ Developer Options ▸ Bubbles. Và trên Android 11 thì nó đã chính thức được sử dụng.
Giờ chúng ta hãy cùng thử triển khai xem sao
Trước hết, bạn có thể đọc thêm về Bubble ở đây
https://developer.android.com/guide/topics/ui/bubbles
Đầu tiên bạn cần set targetSdkVersion thành 30 (Android 11) trong build.gradle
Tiếp đó, bạn cần xây dựng 1 activity để khi user bấm vào Bubble, nó sẽ expand ra.

Chú ý 2 dòng cuối, như tài liệu đã nói The activity must be resizeable and embedded

Bước tiếp theo, hãy chú ý đến dòng sau

Bubbles are built into the Notification system. They float on top of other app content and follow the user wherever they go. Bubbles can be expanded to reveal app functionality and information, and can be collapsed when not being used.
Như vậy, Bubble được xây dựng với hệ thống Notification, nghĩa là để Bubble “nhảy” ra thì cần phải có một notification được bắn ra. Vì vậy ở bước này, ta sẽ build 1 notification, bắt đầu từ tạo channel

Tuy nhiên, không phải notification nào cũng có thể show Bubble, mà cần phải là notification loại conversation, bạn có thể đọc thêm ở đây https://developer.android.com/guide/topics/ui/conversations#api-notifications
Giờ ta sẽ build shortcut cho notification của chúng ta (lưu ý, đây chỉ là code demo nên id, tên tuổi, icon… chỉ mang tính ước lệ và dùng hard-code, bạn không nên dùng vào code thật)

Tiếp đến, ta tạo Bubble Intent và metadata để add vào notification

Cuối cùng là tạo notification:

Đến đây, bạn có thể bắn thử notifcation

Tuy nhiên bạn sẽ không thấy Bubble hiện ra? Why? Tôi đã làm đúng theo document rồi mà?
Đó là do code trong document chưa thỏa mãn điều kiện

mà cần phải là notification loại conversation
Ở phần build notification ở trên, hãy thêm vào vài dòng code để thành như sau

Vậy là xong rồi đấy, giờ hãy thử tính năng mới so với của Facebook xem như nào. Happy coding!!!

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo