Конфигурация оператора связи

Android 6.0 и более поздние версии включают в себя возможность для привилегированных приложений обеспечивать конфигурацию платформы в зависимости от оператора связи. Эта функциональность, основанная на привилегиях оператора UICC , представленных в Android 5.1 (Lollipop MR1), позволяет перенести конфигурацию оператора связи из наложений статической конфигурации и дает операторам связи и OEM-производителям возможность динамически предоставлять конфигурацию оператора связи на платформу через определенный интерфейс.

Правильно подписанное приложение оператора связи можно предварительно загрузить в образ системы, установить автоматически или установить вручную через магазин приложений. Платформа запрашивает приложение для предоставления конфигурации параметров, включая:

  • Роуминговые/нероуминговые сети
  • Визуальная голосовая почта
  • Настройки сети SMS/MMS
  • Конфигурации VoLTE/IMS

Определение того, какие значения возвращать, полностью зависит от приложения-носителя и может быть динамическим на основе подробной информации, передаваемой в приложение через платформу.

Ключевые преимущества этого подхода:

  • Динамическая конфигурация — поддержка таких концепций, как конфигурация, не производная от MCCMNC, например, операторы мобильных виртуальных сетей (MVNO) или клиент, соглашающийся на дополнительные услуги.
  • Поддержка устройств, продаваемых через любой канал . Например, телефон открытого рынка можно автоматически настроить с использованием правильных настроек, загрузив приложение из магазина приложений.
  • Безопасность . Право на предоставление этой конфигурации предоставляется только приложениям, подписанным оператором связи.
  • Определенный API . Раньше эта конфигурация хранилась в основном во внутренних наложениях XML внутри платформы, а не через общедоступный API. API конфигурации оператора связи в Android 6.0 является общедоступным и четко определенным.

Как это работает

Загрузка конфигурации

Конфигурация оператора связи, обеспечиваемая этой функцией, представляет собой набор пар ключ-значение, которые изменяют различное поведение платформы, связанное с телефонией.

Набор значений для конкретного устройства определяется путем запроса следующих компонентов по порядку:

  1. Приложение оператора связи (это необязательно, но это рекомендуемое место для дополнительных настроек, помимо тех, что существуют в Android Open Source Project (AOSP))
  2. Приложение конфигурации платформы, входящее в состав образа системы.
  3. Значения по умолчанию, жестко закодированные в платформе (эквивалентно поведению до Android 6.0).

Приложение конфигурации платформы

Общее приложение конфигурации платформы включено в образ системы. Это приложение может предоставлять значения для любых переменных, которых нет в обычном приложении оператора связи. Приложение конфигурации платформы можно найти (в Android 6.0) в packages/apps/CarrierConfig

Цель этого приложения — предоставить некоторую конфигурацию для каждой сети, когда приложение оператора связи не установлено, и операторы связи/изготовители оборудования должны вносить в него лишь минимальные изменения в своих собственных образах. Вместо этого операторы связи должны предоставить отдельное приложение для настройки оператора, позволяющее распространять обновления через такие каналы, как магазины приложений.

Как привилегия предоставляется приложению оператора связи

Соответствующее приложение оператора связи должно быть подписано тем же сертификатом, что и на SIM-карте, как описано в разделе «Привилегии оператора UICC» .

Какая информация передается в приложение оператора связи

Приложение-оператор поставляется со следующими значениями, что позволяет ему принимать динамическое решение о том, какие значения возвращать:

  • МСС
  • ТНК
  • СПН
  • ИМСИ
  • ГИД1
  • ГИД2
  • Идентификатор оператора связи

Дополнительные сведения об интеграции идентификаторов операторов связи см. в разделе Интеграция идентификаторов операторов связи с CarrierConfig .

При загрузке конфига оператора происходит

Построение списка пар ключ-значение происходит:

  • Когда SIM-карта загружена (загрузка или горячая замена SIM-карты)
  • Когда приложение оператора связи вручную запускает перезагрузку
  • Когда приложение оператора связи обновится

Дополнительные сведения см. в справочнике android.service.carrier.CarrierService#onLoadConfig() .

Использование конфигурации

При построении конфигурации содержащиеся в ней значения используются для установки различных значений конфигурации системы, в том числе:

  • Настройки внутренней телефонии платформы
  • Значения конфигурации, возвращаемые SDK, например, в SmsManager
  • Настройки приложения, такие как значения подключения VVM в номеронабирателе.

Ключи конфигурации

Список ключей определяется как часть общедоступного SDK в android.telephony.CarrierConfigManager и не может изменяться на одном уровне API. В таблице ниже приведено краткое описание ключей.

Создание приложения

Создание приложения

Ваше приложение должно соответствовать уровню API 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>

Подписание приложения тем же сертификатом на SIM-карте

Требования см. в разделе «Привилегии оператора UICC» .

Добавление APN с помощью приложения оператора связи

Чтобы программно добавить APN из приложения оператора связи (например, во время активации SIM-карты), используйте API ContentResolver для добавления элементов APN к поставщику контента, определенному URI android.provider.Telephony.Carriers.CONTENT_URI . Дополнительные сведения о структуре таблицы для URI контента см. в разделе Telephony.Carriers .

Дополнительные сведения см. в разделах APN и CarrierConfig .

Тестирование приложения

Создав приложение конфигурации, вы можете протестировать свой код с помощью:

  • SIM-карта с действительной подписью сертификата
  • Устройство под управлением Android 6.0 и более поздних версий, например устройство Android.