پیکربندی حامل

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

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

  • شبکه های رومینگ/غیر رومینگ
  • پست صوتی تصویری
  • تنظیمات شبکه SMS/MMS
  • تنظیمات VoLTE/IMS

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

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

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

چگونه کار می کند

در حال بارگیری پیکربندی

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

مجموعه مقادیر برای یک دستگاه خاص با جستجوی اجزای زیر به ترتیب تعیین می شود:

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

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

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

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

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

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

چه اطلاعاتی به برنامه حامل منتقل می شود

برنامه حامل با مقادیر زیر عرضه می‌شود که به آن امکان می‌دهد تصمیمی پویا در مورد اینکه چه مقادیری را برگرداند، بگیرد:

  • MCC
  • MNC
  • SPN
  • IMSI
  • GID1
  • GID2
  • شناسه حامل

برای اطلاعات بیشتر در مورد ادغام شناسه های حامل، به ادغام شناسه های حامل با CarrierConfig مراجعه کنید.

هنگام بارگیری پیکربندی حامل رخ می دهد

ایجاد لیست جفت ارزش کلیدی رخ می دهد:

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

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

با استفاده از کانفیگ

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

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

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

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

ساخت اپلیکیشن

ایجاد اپلیکیشن

برنامه شما باید سطح API Android 6.0 (23) را هدف قرار دهد.

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

  1. برای برگرداندن مقادیری که می خواهید بر اساس شیء ارسال شده service.carrier.CarrierIdentifier ارائه دهید onLoadConfig لغو کنید.
  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 مراجعه کنید.

افزودن APN با یک برنامه حامل

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

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

تست کردن برنامه

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

  • سیم کارت حاوی امضای گواهی معتبر
  • دستگاهی که دارای Android نسخه 6.0 و بالاتر است، به عنوان مثال یک دستگاه Android