Mô-đun CellBroadcast giúp các OEM (nhà sản xuất thiết bị gốc) giảm bớt các nỗ lực lặp đi lặp lại (nhờ đó giảm sự phân mảnh trong hệ sinh thái Android và mang lại hành vi nhất quán cho người dùng cuối) và giúp đơn giản hoá quy trình kiểm thử và chứng nhận của nhà mạng đối với các yêu cầu liên quan đến CellBroadcast (vì OEM không thể sửa đổi mã). Bạn có thể cập nhật mô-đun này, tức là mô-đun này có thể nhận các bản cập nhật về chức năng bên ngoài chu kỳ phát hành Android thông thường.
Định dạng gói
Mô-đun CellBroadcast bao gồm dịch vụ và ứng dụng sau đây.
Dịch vụ CellBroadcastService hỗ trợ giải mã SMS CellBroadcast, hàng rào địa lý cho cảnh báo khẩn cấp không dây (WEA) 3.0, kiểm tra tin nhắn trùng lặp và truyền tin nhắn đến các ứng dụng. Đây là dịch vụ nhắn tin một-nhiều, nhắm mục tiêu theo địa lý và có hàng rào địa lý, được thiết kế để gửi tin nhắn đến nhiều người dùng điện thoại di động trong một khu vực xác định cùng một lúc. Dịch vụ này được xác định bởi uỷ ban ETSI GSM, 3GPP và là một phần của các tiêu chuẩn viễn thông.
Ứng dụng CellBroadcastReceiver là một ứng dụng hệ thống mặc định xử lý các cảnh báo khẩn cấp và không khẩn cấp (chẳng hạn như cảnh báo Amber và cảnh báo của tổng thống) và trình bày thông tin cho người dùng cuối dựa trên các quy định của nhà mạng và khu vực.
Quy trình tin nhắn CellBroadcast
Hình sau đây cho thấy quy trình tin nhắn CellBroadcast.
Hình 1. Quy trình tin nhắn CellBroadcastReceiver
Lớp giao diện vô tuyến (RIL) thông báo cho
InBoundSMSHandlervề một SMS CellBroadcast CDMA/GSM.Khung này chuyển tiếp SMS CellBroadcast đến mô-đun CBS để phân tích cú pháp và xử lý tin nhắn đến.
Sau khi tin nhắn được xử lý, CellBroadcastService sẽ chuyển tiếp ý định đến ứng dụng CellBroadcastReceiver mặc định của hệ thống.
Ứng dụng CellBroadcastReceiver hiển thị tin nhắn cho người dùng.
Định dạng mô-đun
Ứng dụng CellBroadcastService và CellBroadcastReceiver được đưa vào một
tệp APEX
(com.android.cellbroadcast), có sẵn cho các thiết bị chạy
Android 11 trở lên. Mô-đun này bao gồm mã trong package/app/CellBroadcastReceiver và di chuyển các lớp khung hiện có sang packages/modules/CellBroadcastService.
Phần phụ thuộc của mô-đun
Mô-đun CellBroadcast tương tác với khung chỉ bằng cách sử dụng @SystemApi ổn định (không có API @hide) và phụ thuộc vào các thư viện tĩnh sau đây.
Androidx.legacy_legacy-support-v13Androidx.recyclerview_recyclerviewAndroidx.preference_preferenceandroidx.legacy_legacy-preference-v14androidx.appcompat_appcompat
Bạn có thể tuỳ chỉnh cấu hình bằng cách sử dụng lớp phủ tài nguyên thời gian chạy (RRO).
Cấu hình quyền
Mô-đun CellBroadcast được ký bằng chữ ký của Google thay vì chữ ký của nền tảng, tức là mô-đun này mất quyền truy cập vào các quyền chữ ký.
Thay vào đó, Android 11 xác định quyền chữ ký mới com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY bên trong mô-đun CellBroadcast; chỉ các gói trong mô-đun mới có thể nhận được quyền này vì chúng được ký bằng cùng một khoá. Quyền này cho phép ứng dụng CellBroadcastReceiver có toàn quyền truy cập vào cơ sở dữ liệu bên trong CellBroadcastService.
Nền tảng cấp quyền thời gian chạy android.permission.READ_CELL_BROADCASTS cho ứng dụng SMS hệ thống mặc định để truy cập vào nhật ký cảnh báo khẩn cấp.
Tích hợp mô-đun CellBroadcast
Phần này mô tả cách tích hợp mô-đun CellBroadcast.
Tích hợp với phần Cài đặt
Bạn có thể quyết định nơi tích hợp chế độ cài đặt CellBroadcast trong ứng dụng Cài đặt (người dùng cuối truy cập vào trang cài đặt CellBroadcast trong phần Cài đặt > Ứng dụng và thông báo > Nâng cao > Cảnh báo khẩn cấp). Để chạy ứng dụng CellBroadcastReceiver trong ứng dụng Cài đặt, hãy thay đổi các cấu hình cài đặt sau bằng tên gói com.android.cellbroadcastreceiver.
<!-- Cell broacast receiver package name [DO NOT TRANSLATE] -->
<string name="cell_broadcast_receiver_package">
com.android.cellbroadcastreceiver</string>
Tích hợp với ứng dụng nhắn tin
Bạn có thể tích hợp đường liên kết ứng dụng vào các ứng dụng nhắn tin để mở nhật ký tin nhắn CellBroadcast. Trong ứng dụng Nhắn tin của Android, tính năng này đã được tích hợp vào phần Cài đặt > Nâng cao > Cảnh báo khẩn cấp. Để tích hợp đường liên kết vào ứng dụng nhắn tin của riêng bạn, hãy xác định đường dẫn trong ứng dụng nhắn tin và định cấu hình tên thành phần cho mô-đun CellBroadcast là com.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity.
Tích hợp với hộp thư đến SMS
Bạn có thể bật tính năng hiển thị tin nhắn CellBroadcast trong ứng dụng nhắn tin mặc định bằng cách ghi đè cấu hình sau bằng runtime resource overlay.
<item type="bool" name="enable_write_alerts_to_sms_inbox" />
Vì việc cấp quyền nằm ngoài phạm vi của mô-đun CellBroadcast, nên bạn phải cấp quyền AppOpsManager.OP_WRITE_SMS cho mô-đun CellBroadcast để cung cấp hỗ trợ toàn diện. Để biết thông tin tham khảo về cách triển khai AOSP,
hãy tham khảo bản vá SmsApplication.java
này.
Chạy ứng dụng CellBroadcastReceiver
Ứng dụng CellBroadcastReceiver có các điểm chạy sau đây.
Trình đơn ứng dụng Cài đặt.
Một ứng dụng (bao gồm cả ứng dụng của bên thứ ba), chẳng hạn như ứng dụng tin nhắn liên kết đến nhật ký tin nhắn CellBroadcast.
(Không bắt buộc) Biểu tượng chạy trên màn hình chính Android do OEM thêm vào. Để biết thông tin chi tiết, hãy xem bài viết Thêm biểu tượng chạy.
Chế độ cài đặt ứng dụng CellBroadcastReceiver
Ảnh chụp màn hình sau đây cho thấy trình đơn cài đặt ứng dụng CellBroadcastReceiver.
Hình 2. Trình đơn cài đặt ứng dụng CellBroadcastReceiver
Hình 3. Màn hình nhật ký cảnh báo khẩn cấp
Thêm biểu tượng chạy
Bạn có thể bật tính năng truy cập vào nhật ký tin nhắn CellBroadcast trong trình chạy ứng dụng và thông qua các biểu tượng chạy của riêng bạn.
Để bật tính năng truy cập vào nhật ký tin nhắn trong trình chạy ứng dụng, hãy ghi đè cấu hình sau bằng RRO.
<item type="bool" name="show_message_history_in_launcher" />Để ghi đè biểu tượng mặc định của AOSP, hãy ghi đè cấu hình sau bằng RRO.
<!-- Customize launcher icon for cellbroadcast history --> <item type="mipmap" name="ic_launcher_cell_broadcast" />
Bật mã bí mật CMAS
Để bật mã bí mật CMAS, *#*#CMAS#*#* (*#*#2627#*#* trên
bàn phím quay số), ứng dụng trình quay số phải theo dõi mã trình quay số đặc biệt ở dạng
*#*#code#*#* và xử lý mã bằng phương thức công khai
sendDialerSpecialCode.
Yêu cầu về thông tin khu vực: Kênh 50
Kênh 50 là một kênh đặc biệt để các nhà mạng truyền phát thông tin liên quan đến khu vực (trừ MTN ở Nam Phi). Đối với kênh này, tin nhắn truyền phát không tạo ra hộp thoại hoặc thông báo. Thay vào đó, tin nhắn truyền phát xuất hiện trong trạng thái SIM của trình đơn Cài đặt hoặc trong thanh trạng thái (ví dụ: hiển thị mã bưu chính).
Việc triển khai Android CellBroadcastService hỗ trợ các API sau trong dịch vụ truyền phát trên di động để các ứng dụng Cài đặt và SysUI nhận thông tin Kênh 50 truyền phát. Để triển khai tính năng này, hãy làm như sau:
Đăng ký truyền phát
android.telephony.action.AREA_INFO_UPDATEDvà ghi đè tên gói của trình nhậnconfig_area_info_receiver_packagesthông qua RRO.Liên kết với
CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE.
Vì các ứng dụng Cài đặt và SysUI nằm ngoài phạm vi của mô-đun CellBroadcast, nên bạn phải triển khai các thay đổi trong SystemUI hoặc ứng dụng Cài đặt để cung cấp hỗ trợ toàn diện. Để biết thông tin tham khảo về cách triển khai, hãy tham khảo ứng dụng Cài đặt CellBroadcastService.
Tuỳ chỉnh
Bạn không thể sửa đổi trực tiếp mã nguồn của mô-đun CellBroadcast, nhưng bạn
có thể sử dụng lớp phủ tài nguyên thời gian chạy
(RRO) để
bật (hoặc tắt) các tham số
(ví dụ: bạn có thể tuỳ chỉnh màu sắc của thông báo và
kích thước trên hộp thoại). Để ghi đè các giá trị mặc định của các tham số được sử dụng trong mô-đun CellBroadcast, hãy thay đổi tên gói đích thành com.android.cellbroadcastreceiver. Ngoài ra:
Để biết danh sách các cấu hình có thể phủ, hãy tham khảo
overlayable.xml.Để biết ví dụ về cách triển khai, hãy tham khảo
RROSampleTestApptrong AOSP.
Nếu quá trình triển khai thiếu tài nguyên bản dịch chuỗi giao diện người dùng hoặc nếu bản dịch không đáp ứng mong đợi của bạn, thì bạn có thể ghi đè tài nguyên bản dịch bằng RRO hoặc làm việc với nhóm dịch của Google để chuyển bản dịch chuỗi lên mô-đun CellBroadcast. Nếu bạn ghi đè tài nguyên bản dịch, thì Google phải hiển thị các chuỗi đó trong overlayable.xml để cho phép ghi đè. Nếu bạn cần thêm cấu hình để tuỳ chỉnh giao diện người dùng, hãy liên hệ với
nhóm hỗ trợ CellBroadcast.
Di chuyển dữ liệu
Android 11 bao gồm một ứng dụng CellBroadcast cũ, đây là cơ chế để giữ lại và di chuyển dữ liệu ứng dụng (bao gồm cả chế độ cài đặt của người dùng và nhật ký cảnh báo khẩn cấp) cho các thiết bị nâng cấp lên mô-đun CellBroadcast. Các quá trình triển khai Android sử dụng mô-đun CellBroadcast phải bao gồm ứng dụng CellBroadcast cũ trong bản dựng để di chuyển dữ liệu. Nếu quá trình triển khai của bạn sử dụng giải pháp truyền phát trên di động tuỳ chỉnh, thì bạn nên xác định tệp APK CellBroadcastContentProvider để giữ lại dữ liệu (bạn có thể xoá tệp APK truyền phát trên di động cũ một cách an toàn trong bản phát hành tiếp theo).
Trên các thiết bị được nâng cấp để sử dụng mô-đun CellBroadcast, mô-đun này sẽ tìm nạp dữ liệu từ AOSP LegacyCellBroadcastApp hoặc tệp APK CellBroadcastContentProvider do OEM xác định thông qua quyền cellbroadcast-legacy được xác định rõ.
Sử dụng tệp APK CellBroadcastContentProvider do OEM xác định
Khi xác định tệp APK CellBroadcastContentProvider, tệp APK này phải tuân theo các thông số kỹ thuật sau.
Tệp APK là tệp APK không có giao diện người dùng chỉ hiển thị nội dung của cơ sở dữ liệu và
SharedPreferencesthông qua đối tượngContentProvidercó quyềncellbroadcast-legacyvà không thể truy cập vào các ứng dụng của bên thứ ba.Tệp APK này do OEM phát triển và sở hữu, trong đó OEM có thể tiếp tục lưu trữ lược đồ API ẩn của họ.
Để di chuyển SharedPreferences sang mô-đun CellBroadcast, tệp APK
CellBroadcastContentProvider phải hỗ trợ phương thức
ContentProvider.call)
với các tham số sau:
- Quyền:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI - Phương thức:
@SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE Đối số:
@SystemAPI CellBroadcast.PreferenceĐây là danh sách các khoá tuỳ chọn dùng chung được hỗ trợ cho mô-đun CellBroadcast. Dữ liệu này được lấy từ
SharedPreferencescho phương thức.ContentProvider.call
Để di chuyển nhật ký tin nhắn sang mô-đun CellBroadcast, tệp APK CellBroadcastContentProvider phải hỗ trợ phương thức
ContentProvider.query
với các tham số sau:
- Quyền:
@SystemAPI CellBroadcast.LEGACY_CONTENT_URI. Truy vấn danh sách cột các thuộc tính tin nhắn được hỗ trợ cho mô-đun CellBroadcast. Nhận dữ liệu (từ cơ sở dữ liệu của bạn) cho phương thứcContentProvider.query.
Để biết thông tin tham khảo về cách triển khai CellBroadcastContentProvider, hãy tham khảo LegacyCellBroadcastContentProvider.
Thử nghiệm
Bộ kiểm tra tính tương thích (CTS) với Android sẽ xác minh chức năng của các API hệ thống phụ thuộc vào ứng dụng. Bạn cũng có thể chạy mô-đun CellBroadcast
unit tests/testappsp.
Nếu OEM đã bật mã bí mật CMAS cho một thiết bị, thì thiết bị đó có thể hỗ trợ chế độ gỡ lỗi với các tính năng sau.
Cảnh báo thử nghiệm được nhóm trong phần Cảnh báo khác với nút bật/tắt.
Nhật ký bao gồm tất cả tin nhắn đã nhận nhưng không hiển thị, chẳng hạn như tin nhắn trùng lặp hoặc tin nhắn bằng ngôn ngữ khác.
Tin nhắn hiển thị tất cả các tham số có sẵn, bao gồm số sê-ri, mã tin nhắn và ngày hết hạn.
Để bật chế độ gỡ lỗi, hãy quay số *#*#CMAS#*#* trên trình quay số.