Конфигурация несущей

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.