اعلان شرکت مخابراتی

‫Android نسخه ۶.۰ و بالاتر قابلیت برنامه‌های ممتاز را برای ارائه پیکربندی ویژه شرکت مخابراتی به پلاتفرم ارائه می‌دهد. این عملکرد که براساس امتیازات شرکت مخابراتی UICC معرفی‌شده در Android 5.1 (Lollipop MR1) است، به پیکربندی شرکت مخابراتی اجازه می‌دهد از رونهادهای پیکربندی ثابت جدا شود و به شرکت‌های مخابراتی و سازندگان اصلی محصول امکان می‌دهد پیکربندی شرکت مخابراتی را به‌صورت پویا ازطریق یک میانای تعریف‌شده به پلاتفرم ارائه دهند.

برنامه شرکت مخابراتی که به‌درستی امضا شده باشد می‌تواند در تصویر سیستم پیش‌بار شود، به‌طور خودکار نصب شود، یا به‌طور دستی ازطریق فروشگاه برنامه نصب شود. پلاتفرم از برنامه درخواست می‌کند تا پیکربندی تنظیمات را ارائه دهد، ازجمله:

  • شبکه‌های درحال/غیردرحال رومینگ
  • پست صوتی تصویری
  • تنظیمات شبکه پیامک/فراپیام
  • پیکربندی‌های VoLTE/IMS

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

مزایای کلیدی این رویکرد عبارت‌اند از:

  • پیکربندی پویا - پشتیبانی از مفاهیمی مانند پیکربندی مشتق‌شده غیر MCCMNC، برای مثال، اپراتورهای شبکه مجازی تلفن همراه (MVNO) یا موافقت مشتری با خدمات اضافی.
  • پشتیبانی از دستگاه‌های فروخته‌شده ازطریق هر کانالی - برای مثال، تلفن بازار آزاد را می‌توان با بارگیری برنامه‌ای از فروشگاه برنامه به‌طور خودکار با تنظیمات درست پیکربندی کرد.
  • امنیت - امتیاز ارائه این پیکربندی فقط به برنامه‌هایی داده می‌شود که شرکت مخابراتی آن‌ها را امضا کرده باشد.
  • میانای برنامه‌سازی کاربردی تعریف‌شده - قبلاً این پیکربندی بیشتر در پوشش‌های XML داخلی در چارچوب ذخیره می‌شد و نه ازطریق میانای برنامه‌سازی کاربردی عمومی. میانای برنامه‌سازی کاربردی پیکربندی شرکت مخابراتی در Android 6.0 عمومی است و به‌خوبی تعریف شده است.

روش کار

بار کردن پیکربندی

پیکربندی شرکت مخابراتی که این ویژگی ارائه می‌دهد مجموعه‌ای از جفت‌های کلید-مقدار است که عملکردهای مختلف مربوط به تلفن را در پلاتفرم تغییر می‌دهد.

مجموعه مقادیر برای دستگاهی خاص با پُرسمان از مؤلفه‌های زیر به‌ترتیب تعیین می‌شود:

  1. برنامه شرکت مخابراتی (این مورد اختیاری است، اما مکان توصیه‌شده برای پیکربندی اضافی فراتر از آنچه در «پروژه منبع باز Android» (AOSP) وجود دارد است)
  2. برنامه پیکربندی پلاتفرم که با تصویر سیستم همراه شده است
  3. مقادیر پیش‌فرض، کدگذاری‌شده در چارچوب (معادل رفتار قبل از Android 6.0)

برنامه پیکربندی پلاتفرم

برنامه پیکربندی پلاتفرم عمومی با تصویر سیستم دسته‌بندی می‌شود. این برنامه می‌تواند مقادیر هر متغیری را که برنامه شرکت مخابراتی معمولی ارائه نمی‌دهد، ارائه کند. برنامه پیکربندی پلاتفرم را می‌توانید (در Android 6.0) در اینجا پیدا کنید: packages/apps/CarrierConfig

هدف این برنامه ارائه برخی پیکربندی‌های هر شبکه در زمانی است که برنامه شرکت مخابراتی نصب نشده باشد، و شرکت‌های مخابراتی/سازندگان اصلی تجهیزات باید فقط تغییرات حداقلی در آن در تصاویر خودشان ایجاد کنند. درعوض، شرکت‌های مخابراتی باید برنامه شرکت مخابراتی جداگانه‌ای برای سفارشی‌سازی شرکت مخابراتی ارائه دهند تا به‌روزرسانی‌ها بتوانند ازطریق کانال‌هایی مثل فروشگاه‌های برنامه توزیع شوند.

نحوه اعطای امتیاز به برنامه شرکت مخابراتی

برنامه شرکت مخابراتی موردنظر باید با همان گواهینامه‌ای که در سیم‌کارت وجود دارد امضا شود، همان‌طور که در امتیازات شرکت مخابراتی UICC مستند شده است.

چه اطلاعاتی به برنامه شرکت مخابراتی ارسال می‌شود

برنامه شرکت مخابراتی با مقادیر زیر ارائه می‌شود و به آن امکان می‌دهد درباره مقادیری که باید برگرداند تصمیم پویا بگیرد:

  • MCC
  • MNC
  • SPN
  • شناسه مشترک بین‌المللی تلفن همراه : IMSI
  • GID
  • GID2
  • شناسه شرکت مخابراتی

برای کسب اطلاعات بیشتر درباره ادغام شناسه‌های شرکت مخابراتی، ادغام شناسه‌های شرکت مخابراتی با CarrierConfig را ببینید.

هنگام بار کردن پیکربندی شرکت مخابراتی رخ می‌دهد

ساخت فهرست جفت‌های کلید/مقدار در موارد زیر رخ می‌دهد:

  • وقتی سیم‌کارت بارگیری می‌شود (راه‌اندازی یا تعویض سیم‌کارت درحین روشن بودن دستگاه)
  • وقتی برنامه شرکت مخابراتی به‌صورت دستی باعث بارگیری مجدد می‌شود
  • وقتی برنامه شرکت مخابراتی به‌روزرسانی می‌شود

برای جزئیات بیشتر، به android.service.carrier.CarrierService#onLoadConfig() مرجع مراجعه کنید.

استفاده از پیکربندی

وقتی پیکربندی ساخته می‌شود، مقادیر موجود در آن برای تنظیم مقادیر مختلف پیکربندی سیستم استفاده می‌شود، ازجمله:

  • تنظیمات تلفنی چارچوب داخلی
  • مقادیر پیکربندی برگشتی کیت توسعه نرم‌افزار، برای مثال، در SmsManager
  • تنظیمات برنامه مثل مقادیر اتصال VVM در «شماره‌گیر»

کلیدهای پیکربندی

فهرست کلیدها به‌عنوان بخشی از «کیت توسعه نرم‌افزار» عمومی در android.telephony.CarrierConfigManager تعریف شده است و در سطح میانای برنامه‌سازی کاربردی یکسان نمی‌تواند تغییر کند. برای خلاصه کلیدها، جدول زیر را ببینید.

ساختن برنامه

ایجاد برنامه

برنامه شما باید سطح میانای برنامه‌سازی کاربردی Android 6.0 (23) را هدف‌یابی کند.

کلاسی را اعلام کنید که android.service.carrier.CarrierService را لغو کند

  1. ‫onLoadConfig را ملغی کنید تا مقادیری را که می‌خواهید براساس شیء service.carrier.CarrierIdentifier ارائه‌شده تأمین کنید.
  2. منطق را به notifyConfigChangedForSubId در سناریوهایی اضافه کنید که پیکربندی شرکت مخابراتی ممکن است با گذشت زمان تغییر کند (برای مثال، زمانی که کاربر خدمات اضافی به حساب خود اضافه می‌کند).

مثالی در زیر آمده است:

public class SampleCarrierConfigService extends CarrierService {

    private static final String TAG = "SampleCarrierConfigService";

    public SampleCarrierConfigService() {
        Log.d(TAG, "Service created");
    }

    @Override
    public PersistableBundle onLoadConfig(CarrierIdentifier id) {
        Log.d(TAG, "Config being fetched");
        PersistableBundle config = new PersistableBundle();
        config.putBoolean(
            CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL, true);
        config.putBoolean(
            CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, false);
        config.putInt(CarrierConfigManager.KEY_VOLTE_REPLACEMENT_RAT_INT, 6);
        // Check CarrierIdentifier and add more config if needed…
        return config;
    }
}

برای جزئیات بیشتر، به android.service.carrier.CarrierService مرجع مراجعه کنید.

نام کلاس را در مانیفست ذکر کنید

مثالی در زیر آمده است:

<service android:name=".SampleCarrierConfigService"
android:label="@string/service_name"
android:permission="android.permission.BIND_CARRIER_SERVICES">
      <intent-filter>
      <action android:name="android.service.carrier.CarrierService"/></intent-filter>
</service>

برنامه را با همان گواهینامه در سیم‌کارت امضا کنید

برای اطلاع از الزامات، امتیازات شرکت مخابراتی UICC را ببینید.

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

برای افزودن «نام نقطه دسترسی» به‌صورت برنامه‌ریزی‌شده از برنامه شرکت مخابراتی (برای مثال، درطول فعال‌سازی سیم‌کارت)، از ContentResolver میاناهای برنامه‌سازی کاربردی برای افزودن عناصر «نام نقطه دسترسی» به ارائه‌دهنده محتوایی که با نشانی وب android.provider.Telephony.Carriers.CONTENT_URI شناسایی می‌شود استفاده کنید. برای اطلاعات بیشتر درباره ساختار جدول برای نشانی وب محتوا، به Telephony.Carriers مراجعه کنید.

برای اطلاعات بیشتر، APN و CarrierConfig را ببینید.

آزمایش برنامه

وقتی برنامه پیکربندی‌تان را ساختید، می‌توانید کدتان را با موارد زیر آزمایش کنید:

  • سیم‌کارتی که حاوی امضای گواهی معتبر باشد
  • دستگاهی با Android نسخه ۶.۰ و بالاتر، برای مثال دستگاه Android

تنظیم قابلیت‌های سرویس شرکت مخابراتی

در Android، قابلیت‌های سرویس شرکت مخابراتی توضیح می‌دهد که آیا سرویس‌های صوتی، پیام‌رسانی، و داده در دستگاه پشتیبانی می‌شوند یا نه. اپراتورها می‌توانند قابلیت‌های سرویس اپراتور را برای دستگاه در سطح دستگاه و در سطح اشتراک مشخص کنند (Android 15 یا بالاتر).

قابلیت‌های سرویس سطح دستگاه

قابلیت‌های خدمات سطح دستگاه هنگام تولید دستگاه پیکربندی می‌شوند (پس‌از تولید قابل‌تغییر نیستند). شرکت‌های مخابراتی می‌توانند قابلیت‌های سطح دستگاه را ازطریق لغو کردن منابع سیستم زیر مشخص کنند:

برنامه‌ها می‌توانند ازطریق میاناهای برنامه‌سازی کاربردی زیر، قابلیت‌های سرویس سطح دستگاه را پُرسمان کنند:

قابلیت‌های سرویس سطح اشتراک

برای دستگاه‌های دارای Android 15 یا بالاتر، شرکت‌های مخابراتی می‌توانند قابلیت‌های سرویس دستگاه را در سطح اشتراک مشخص کنند. برای مشخص کردن قابلیت‌های سرویس سطح اشتراک، از CarrierConfigManager.KEY_CELLULAR_SERVICE_CAPABILITIES_INT_ARRAY API استفاده کنید. برای مثال، برای مشخص کردن اینکه اشتراک فقط داده است، مقدار را روی SubscriptionManager#SERVICE_CAPABILITY_DATA تنظیم کنید.

برنامه‌ها (برنامه‌های سیستم ازپیش بارگذاری‌شده و برنامه‌های طرف سوم) می‌توانند قابلیت‌های سرویس شرکت مخابراتی را برای اشتراک مشخصی ازطریق روش SubscriptionInfo.getServiceCapabilities() پُرسمان کنند. این امر به توسعه‌دهندگان نرم‌افزار امکان می‌دهد تجربه کاربری برنامه‌ها را براساس قابلیت‌های دردسترس برای اشتراک سفارشی‌سازی کنند. برای مثال، توسعه‌دهندگان برنامه می‌توانند مطمئن شوند که اگر کاربر در اشتراک فقط داده باشد، برنامه شماره‌گیر اجازه برقراری تماس را ندهد.

میاناهای برنامه‌سازی کاربردی قابلیت‌های سرویس منسوخ

از Android 15،‏ Android قابلیت‌های سرویس را هم در سطح دستگاه و هم در سطح اشتراک ارائه می‌دهد. به‌دلیل این تغییر، نام میاناهای برنامه‌سازی کاربردی قابلیت‌های سطح دستگاه موجود برای خوانایی بهتر تغییر کرد. جدول زیر میاناهای برنامه‌سازی کاربردی منسوخ و میاناهای برنامه‌سازی کاربردی تغییرنام‌داده‌شده معرفی‌شده در Android 15 را فهرست می‌کند:

منسوخ‌شده (Android 14 یا پایین‌تر) معادل (Android 15 یا بالاتر)
TelephonyManager.isVoiceCapable() TelephonyManager.isDeviceVoiceCapable()
TelephonyManager.isSmsCapable() TelephonyManager.isDeviceSmsCapable()