پخش سلولی

واحد «همه‌فرستی سلولی» تلاش‌های تکراری را برای تولیدکنندگان تجهیزات اصلی کاهش می‌دهد (که به نوبه خود باعث کاهش پراکندگی در سراسر اکوسیستم Android می‌شود و عملکردی یکپارچه برای کاربران نهایی فراهم می‌کند) و به ساده‌سازی آزمایش و گواهینامه شرکت مخابراتی برای الزامات مربوط به «همه‌فرستی سلولی» کمک می‌کند (زیرا تولیدکنندگان تجهیزات اصلی نمی‌توانند کد را تغییر دهند). این واحد به‌روزرسانی‌پذیر است، یعنی می‌تواند به‌روزرسانی‌های مربوط به عملکرد را خارج از چرخه انتشار عادی Android دریافت کند.

قالب بسته

واحد «پخش سلولی» از سرویس و برنامه زیر تشکیل شده است.

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

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

جریان پیام «همه‌فرستی سلولی»

شکل زیر جریان پیام «پخش سلولی» را نشان می‌دهد.

جریان پیام CellBroadcastReceiver

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

  1. لایه میانای رادیویی (RIL) InBoundSMSHandler را درباره پیامک «پخش سلولی» CDMA/GSM مطلع می‌کند.

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

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

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

قالب واحد

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

وابستگی‌های واحد

واحد «پخش سلولی» فقط بااستفاده از @SystemApi پایدار (بدون میاناهای برنامه‌سازی کاربردی @hide) با چارچوب تعامل می‌کند و به کتابخانه‌های ایستای زیر وابسته است.

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

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

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

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

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

یکپارچه کردن واحد «پخش سلولی»

این بخش نحوه ادغام کردن ماژول 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>

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

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

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

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

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

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

راه‌اندازی برنامه CellBroadcastReceiver

برنامه CellBroadcastReceiver نقاط راه‌اندازی زیر را دارد.

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

  • برنامه‌ای (ازجمله برنامه‌های طرف سوم) مانند برنامه پیام‌رسانی که به سابقه پیام CellBroadcast پیوند می‌دهد.

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

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

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

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

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

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

شکل ۳. صفحه سابقه هشدار اضطراری

افزودن نمادهای راه‌اندازی

می‌توانید دسترسی به سابقه پیام «پخش همگانی تلفن همراه» را از راه‌انداز برنامه و ازطریق نمادهای راه‌انداز خودتان فعال کنید.

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

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

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

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

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

الزام اطلاعات منطقه: کانال ۵۰

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

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

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

  • به CellBroadcastService.CELL_BROADCAST_SERVICE_INTERFACE اختصاص دهید.

ازآنجایی‌که برنامه‌های «تنظیمات» و SysUI خارج از محدوده واحد CellBroadcast قرار دارند، باید تغییراتتان را در برنامه SystemUI یا «تنظیمات» پیاده‌سازی کنید تا پشتیبانی سرتاسری ارائه دهید. برای پیاده‌سازی مرجع، به برنامه «تنظیمات خدمات پیام همگانی سلولی» مراجعه کنید.

سفارشی‌سازی

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

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

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

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

انتقال اطلاعات

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

در دستگاه‌هایی که برای استفاده از واحد «پخش سلولی» ارتقا یافته‌اند، واحد داده‌ها را از «برنامه پخش سلولی قدیمی AOSP» یا فایل APK «ارائه‌دهنده محتوای پخش سلولی» تعریف‌شده توسط سازنده اصلی تجهیزات ازطریق مرجع cellbroadcast-legacy خوش‌تعریف واکشی می‌کند.

از APK CellBroadcastContentProvider تعریف‌شده توسط سازنده اصلی محصول استفاده کنید

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

  • فایل APK یک فایل APK بدون سر است که فقط محتوای پایگاه داده خود را ازطریق و SharedPreferencesContentProvider شیء با مرجع cellbroadcast-legacy نمایان می‌کند و برنامه‌های طرف سوم نمی‌توانند به آن دسترسی داشته باشند.

  • «فایل APK» توسط «سازنده اصلی محصول» توسعه داده و متعلق به او است، و «سازنده اصلی محصول» می‌تواند به میزبانی طرحواره میانای برنامه‌سازی کاربردی پنهان خود ادامه دهد.

برای انتقال SharedPreferences به واحد «پخش همگانی سلولی»، ‫CellBroadcastContentProvider APK باید از روش ContentProvider.call) با پارامترهای زیر پشتیبانی کند:

  • مرجع: @SystemAPI CellBroadcast.LEGACY_CONTENT_URI
  • روش: @SystemAPI CellBroadcast.CALL_METHOD_GET_PREFERENCE
  • Arg: @SystemAPI CellBroadcast.Preference

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

برای انتقال سابقه پیام به واحد «پخش سلولی»، ‫CellBroadcastContentProvider APK باید از ContentProvider.query روش با پارامترهای زیر پشتیبانی کند:

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

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

آزمایش

«مجموعه آزمون سازگاری Android» (CTS) عملکرد میاناهای برنامه‌سازی کاربردی سیستم وابسته به برنامه را درستی‌سنجی می‌کند. همچنین می‌توانید واحد «پخش سلولی» unit tests/testappsp را اجرا کنید.

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

  • هشدارهای آزمایشی در زیر هشدارهای دیگر با کلید روشن/خاموش گروه‌بندی شده‌اند.

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

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

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

تماس

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