پخش سلولی

ماژول CellBroadcast تلاش‌های تکراری برای تولیدکنندگان اصلی تجهیزات (OEM) را کاهش می‌دهد (که به نوبه خود باعث کاهش پراکندگی در اکوسیستم اندروید و ارائه رفتار سازگار به کاربران نهایی می‌شود) و به ساده‌سازی آزمایش اپراتور و صدور گواهینامه برای الزامات مرتبط با CellBroadcast کمک می‌کند (زیرا کد نمی‌تواند توسط تولیدکنندگان اصلی تجهیزات (OEM) تغییر کند). این ماژول قابل به‌روزرسانی است، به این معنی که می‌تواند به‌روزرسانی‌های مربوط به عملکرد را خارج از چرخه انتشار معمول اندروید دریافت کند.

قالب بسته

ماژول CellBroadcast از سرویس و برنامه زیر تشکیل شده است.

  • سرویس CellBroadcastService از رمزگشایی پیامک CellBroadcast، تعیین محدوده جغرافیایی برای هشدار اضطراری بی‌سیم (WEA) 3.0، بررسی تکرار پیام و پخش پیام‌ها به برنامه‌ها پشتیبانی می‌کند. این یک سرویس پیام‌رسانی یک به چند با هدف جغرافیایی و تعیین محدوده جغرافیایی است که برای ارسال پیام به چندین کاربر تلفن همراه، در یک منطقه مشخص، به طور همزمان طراحی شده است. این سرویس توسط کمیته ETSI GSM، 3GPP ، تعریف شده است و بخشی از استانداردهای مخابراتی است.

  • برنامه CellBroadcastReceiver یک برنامه پیش‌فرض سیستم است که هشدارهای اضطراری و غیراضطراری (مانند هشدارهای زرد و ریاست جمهوری) را مدیریت می‌کند و اطلاعات را بر اساس مقررات اپراتور و منطقه‌ای به کاربران نهایی ارائه می‌دهد.

جریان پیام CellBroadcast

شکل زیر جریان پیام CellBroadcast را نشان می‌دهد.

جریان پیام CellBroadcastReceiver

شکل ۱. جریان پیام CellBroadcastReceiver

  1. لایه رابط رادیویی (RIL) به InBoundSMSHandler در مورد یک پیامک CDMA/GSM CellBroadcast اطلاع می‌دهد.

  2. این چارچوب، پیامک CellBroadcast را به ماژول CBS ارسال می‌کند تا پیام دریافتی تجزیه و پردازش شود.

  3. پس از پردازش پیام، CellBroadcastService اینتنت را به برنامه پیش‌فرض سیستم یعنی CellBroadcastReceiver ارسال می‌کند.

  4. برنامه CellBroadcastReceiver پیام را به کاربر نمایش می‌دهد.

قالب ماژول

برنامه CellBroadcastService و CellBroadcastReceiver در یک فایل APEX واحد ( com.android.cellbroadcast ) گنجانده شده‌اند که برای دستگاه‌های دارای اندروید ۱۱ یا بالاتر در دسترس است. این ماژول شامل کدی در package/app/CellBroadcastReceiver است و کلاس‌های فریم‌ورک موجود را به packages/modules/CellBroadcastService منتقل می‌کند.

وابستگی‌های ماژول

ماژول CellBroadcast تنها با استفاده از @SystemApi پایدار (بدون APIهای @hide ) با چارچوب تعامل می‌کند و به کتابخانه‌های استاتیک زیر وابسته است.

  • Androidx.legacy_legacy-support-v13
  • Androidx.recyclerview_recyclerview
  • Androidx.preference_preference
  • androidx.legacy_legacy-preference-v14
  • androidx.appcompat_appcompat

شما می‌توانید پیکربندی را با استفاده از پوشش‌های منابع زمان اجرا (RRO) سفارشی کنید.

پیکربندی مجوزها

ماژول CellBroadcast به جای امضای پلتفرم، با امضای گوگل امضا شده است، به این معنی که ماژول دسترسی به مجوزهای امضا را از دست می‌دهد. در عوض، اندروید ۱۱ مجوز امضای جدید com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY را درون ماژول CellBroadcast تعریف می‌کند؛ فقط بسته‌های موجود در ماژول می‌توانند این مجوز را دریافت کنند زیرا با همان کلید امضا شده‌اند. این مجوز به برنامه CellBroadcastReceiver اجازه می‌دهد تا به پایگاه داده درون CellBroadcastService دسترسی کامل داشته باشد.

این پلتفرم، مجوز زمان اجرای android.permission.READ_CELL_BROADCASTS را به برنامه پیش‌فرض پیامک سیستم برای دسترسی به تاریخچه هشدارهای اضطراری اعطا می‌کند.

ادغام ماژول CellBroadcast

این بخش نحوه ادغام ماژول CellBroadcast را شرح می‌دهد.

ادغام با تنظیمات

شما می‌توانید در برنامه تنظیمات، محل ادغام تنظیمات CellBroadcast را تعیین کنید (کاربران نهایی می‌توانند از طریق تنظیمات > برنامه‌ها و اعلان‌ها > پیشرفته > هشدار اضطراری به صفحه تنظیمات CellBroadcast دسترسی پیدا کنند). برای اجرای برنامه CellBroadcastReceiver از برنامه تنظیمات، پیکربندی‌های تنظیمات زیر را با نام بسته com.android.cellbroadcastreceiver تغییر دهید.

<!-- Cell broacast receiver package name [DO NOT TRANSLATE] -->
<string name="cell_broadcast_receiver_package">
com.android.cellbroadcastreceiver</string>

ادغام با برنامه‌های پیام‌رسان

شما می‌توانید یک لینک برنامه را در برنامه‌های پیام‌رسان ادغام کنید تا تاریخچه پیام‌های CellBroadcast را باز کنید. در برنامه پیام‌رسان اندروید، این قابلیت در تنظیمات > پیشرفته > هشدار اضطراری ادغام شده است. برای ادغام یک لینک در برنامه پیام‌رسان خود، مسیر را در برنامه پیام‌رسان تعریف کنید و نام کامپوننت ماژول CellBroadcast را به صورت com.android.cellbroadcastreceiver/com.android.cellbroadcastreceiver.CellBroadcastListActivity پیکربندی کنید.

ادغام با صندوق ورودی پیامک

شما می‌توانید با لغو پیکربندی زیر با استفاده از یک پوشش منبع زمان اجرا، نمایش پیام‌های CellBroadcast را در برنامه پیام‌رسانی پیش‌فرض فعال کنید.

<item type="bool" name="enable_write_alerts_to_sms_inbox" />

از آنجا که اعطای مجوزها خارج از محدوده ماژول CellBroadcast است، شما باید مجوز AppOpsManager.OP_WRITE_SMS را به ماژول CellBroadcast اعطا کنید تا پشتیبانی سرتاسری ارائه شود. برای پیاده‌سازی مرجع AOSP، به این وصله SmsApplication.java مراجعه کنید.

برنامه CellBroadcastReceiver را اجرا کنید.

برنامه CellBroadcastReceiver دارای نقاط شروع زیر است.

  • منوی برنامه تنظیمات.

  • یک برنامه (از جمله برنامه‌های شخص ثالث) مانند برنامه پیام‌رسان که به سابقه پیام‌های CellBroadcast پیوند دارد.

  • (اختیاری) یک آیکون راه‌اندازی از صفحه اصلی اندروید که توسط سازنده اصلی دستگاه (OEM) اضافه شده است. برای جزئیات بیشتر، به افزودن آیکون راه‌اندازی مراجعه کنید.

تنظیمات برنامه CellBroadcastReceiver

تصاویر زیر منوی تنظیمات برنامه CellBroadcastReceiver را نشان می‌دهند.

منوی تنظیمات برنامه CellBroadcastReceiver

شکل ۲. منوی تنظیمات برنامه CellBroadcastReceiver

سابقه هشدار اضطراری

شکل ۳. صفحه تاریخچه هشدار اضطراری

اضافه کردن آیکون‌های پرتاب

شما می‌توانید دسترسی به تاریخچه پیام‌های CellBroadcast را از طریق لانچر برنامه و از طریق آیکون‌های راه‌اندازی خودتان فعال کنید.

  • برای فعال کردن دسترسی به تاریخچه پیام‌ها از طریق لانچر برنامه، پیکربندی زیر را با استفاده از RRO لغو کنید.

    <item type="bool" name="show_message_history_in_launcher" />
    
  • برای لغو آیکون پیش‌فرض AOSP، پیکربندی زیر را با استفاده از RRO لغو کنید.

    <!-- Customize launcher icon for cellbroadcast history -->
    <item type="mipmap" name="ic_launcher_cell_broadcast" />
    

کد مخفی CMAS را فعال کنید

برای فعال کردن کد مخفی CMAS، *#*#CMAS#*#* ( *#*#2627#*#* روی صفحه شماره‌گیری)، یک برنامه شماره‌گیر باید به کد ویژه شماره‌گیر به شکل *#*# code #*#* گوش دهد و با استفاده از متد عمومی sendDialerSpecialCode کد را مدیریت کند.

اطلاعات مورد نیاز منطقه: کانال ۵۰

کانال ۵۰ یک کانال ویژه برای اپراتورها جهت پخش اطلاعات مربوط به منطقه است (به جز MTN در آفریقای جنوبی). برای این کانال، پیام‌های پخش منجر به کادر محاوره‌ای یا اعلان نمی‌شوند. در عوض، پیام‌های پخش در وضعیت سیم‌کارت در منوی تنظیمات یا در نوار وضعیت (برای مثال، نمایش کد پستی) ظاهر می‌شوند.

پیاده‌سازی سرویس پخش سلولی اندروید (Android CellBroadcastService) از APIهای زیر در سرویس پخش سلولی برای برنامه‌های تنظیمات و SysUI پشتیبانی می‌کند تا اطلاعات کانال پخش ۵۰ را دریافت کند. برای پیاده‌سازی این، موارد زیر را انجام دهید:

  • تابع broadcast android.telephony.action.AREA_INFO_UPDATED را ثبت کنید و نام بسته گیرنده config_area_info_receiver_packages از طریق یک RRO بازنویسی کنید.

  • اتصال به CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE .

از آنجا که برنامه‌های Settings و SysUI خارج از محدوده ماژول CellBroadcast هستند، شما باید تغییرات خود را در SystemUI یا برنامه Settings پیاده‌سازی کنید تا پشتیبانی سرتاسری ارائه شود. برای پیاده‌سازی مرجع، به برنامه CellBroadcastService Settings مراجعه کنید.

سفارشی‌سازی

شما نمی‌توانید مستقیماً کد منبع ماژول CellBroadcast را تغییر دهید، اما می‌توانید از پوشش‌های منبع زمان اجرا (RRO) برای فعال (یا غیرفعال) پارامترها استفاده کنید (برای مثال، می‌توانید رنگ اعلان‌ها و ابعاد روی دیالوگ‌ها را سفارشی کنید). برای لغو مقادیر پیش‌فرض پارامترهای استفاده شده در ماژول CellBroadcast، نام بسته هدف را به com.android.cellbroadcastreceiver تغییر دهید. علاوه بر این:

  • برای فهرستی از پیکربندی‌های قابل همپوشانی، به overlayable.xml مراجعه کنید.

  • برای یک نمونه پیاده‌سازی، به RROSampleTestApp در AOSP مراجعه کنید.

اگر پیاده‌سازی فاقد منابع ترجمه رشته رابط کاربری است یا اگر ترجمه‌ها انتظارات شما را برآورده نمی‌کنند، می‌توانید منابع ترجمه را با استفاده از RRO لغو کنید یا با تیم ترجمه گوگل برای ترجمه رشته‌های بالادستی به ماژول CellBroadcast همکاری کنید. اگر منابع ترجمه را لغو کنید، گوگل باید آن رشته‌ها را در overlayable.xml نمایش دهد تا امکان لغو فراهم شود. اگر برای سفارشی‌سازی رابط کاربری به تنظیمات بیشتری نیاز دارید، با گروه پشتیبانی CellBroadcast تماس بگیرید.

انتقال داده‌ها

اندروید ۱۱ شامل یک برنامه قدیمی CellBroadcast است که مکانیزمی برای حفظ و انتقال داده‌های برنامه (از جمله تنظیمات کاربر و تاریخچه هشدارهای اضطراری) برای دستگاه‌هایی است که به ماژول CellBroadcast ارتقا می‌یابند. پیاده‌سازی‌های اندرویدی که از ماژول CellBroadcast استفاده می‌کنند، باید برنامه قدیمی CellBroadcast را در ساخت خود برای انتقال داده‌ها لحاظ کنند. اگر پیاده‌سازی شما از یک راه‌حل سفارشی CellBroadcast استفاده می‌کند، باید یک APK CellBroadcastContentProvider برای حفظ داده‌ها تعریف کنید (می‌توانید APK قدیمی پخش سلولی را در نسخه بعدی با خیال راحت حذف کنید).

در دستگاه‌هایی که برای استفاده از ماژول CellBroadcast ارتقا یافته‌اند، این ماژول داده‌ها را از طریق مجوز cellbroadcast-legacy به خوبی تعریف شده است، یا از AOSP LegacyCellBroadcastApp یا از CellBroadcastContentProvider APK تعریف شده توسط OEM دریافت می‌کند.

از یک APK CellBroadcastContentProvider تعریف شده توسط OEM استفاده کنید

هنگام تعریف یک APK از CellBroadcastContentProvider، APK باید از این مشخصات پیروی کند.

  • این APK یک APK بدون سر (headless) است که فقط محتویات پایگاه داده و SharedPreferences خود را از طریق یک شیء ContentProvider با مجوز cellbroadcast-legacy نمایش می‌دهد و برای برنامه‌های شخص ثالث قابل دسترسی نیست.

  • APK توسط تولیدکننده اصلی (OEM) توسعه داده شده و متعلق به آن است، جایی که تولیدکننده اصلی می‌تواند به میزبانی طرحواره API پنهان خود ادامه دهد.

برای انتقال SharedPreferences به ماژول CellBroadcast، فایل APK مربوط به CellBroadcastContentProvider باید از متد ContentProvider.call ) با پارامترهای زیر پشتیبانی کند:

  • مرجع: @SystemAPI CellBroadcast.LEGACY_CONTENT_URI
  • متد: @SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
  • آرگومان: @SystemAPI CellBroadcast.Preference

    این لیستی از کلیدهای تنظیمات اشتراکی پشتیبانی‌شده برای ماژول CellBroadcast است. داده‌ها از SharedPreferences برای متد ContentProvider.call می‌آیند.

برای انتقال تاریخچه پیام‌ها به ماژول CellBroadcast، فایل APK مربوط به CellBroadcastContentProvider باید از متد ContentProvider.query با پارامترهای زیر پشتیبانی کند:

  • اعتبار: @SystemAPI CellBroadcast.LEGACY_CONTENT_URI . ستون‌های کوئری، ویژگی‌های پیام پشتیبانی‌شده برای ماژول CellBroadcast را فهرست می‌کنند. داده‌ها را (از پایگاه داده شما) برای متد ContentProvider.query دریافت می‌کند.

برای پیاده‌سازی مرجع CellBroadcastContentProvider, به LegacyCellBroadcastContentProvider مراجعه کنید.

آزمایش

مجموعه تست سازگاری اندروید (CTS) عملکرد APIهای سیستم وابسته به برنامه را تأیید می‌کند. همچنین می‌توانید unit tests/testappsp را اجرا کنید.

اگر تولیدکننده اصلی (OEM) کد مخفی CMAS را برای یک دستگاه فعال کرده باشد، آن دستگاه می‌تواند از حالت اشکال‌زدایی (Debug mode) با ویژگی‌های زیر پشتیبانی کند.

  • هشدارهای آزمایشی در زیر مجموعه‌ی «سایر هشدارها» با یک دکمه‌ی روشن/خاموش گروه‌بندی شده‌اند.

  • تاریخچه شامل تمام پیام‌هایی است که دریافت شده‌اند اما نمایش داده نشده‌اند، مانند پیام‌های تکراری یا پیام‌هایی به زبان دیگر.

  • پیام‌ها تمام پارامترهای موجود، از جمله شماره سریال، شناسه پیام و تاریخ انقضا را نمایش می‌دهند.

برای فعال کردن حالت اشکال‌زدایی، کد *#*#CMAS#*#* را در شماره‌گیر شماره‌گیری کنید.

تماس

برای جزئیات بیشتر یا سوالات مربوط به ماژول CellBroadcast، با گروه پشتیبانی CellBroadcast تماس بگیرید.