Идентификация оператора связи

Устройства с Android 9 могут распознавать информацию о подписке и операторе связи, чтобы предоставлять идентификатор и название оператора. В Android есть база данных с идентификаторами операторов и правилами сопоставления для каждого оператора и его уникального идентификатора. Проект Android Open Source (AOSP) включает содержимое базы данных идентификаторов операторов связи в файле carrier_list.textpb. Единая база данных позволяет сократить количество дублирующихся логических элементов в приложениях, которым нужно идентифицировать операторов связи, и ограничить доступ к атрибутам, позволяющим это делать.

Чтобы повысить точность и полноту идентификации операторов, Android поддерживает внеполосные обновления и обновления таблиц идентификаторов операторов. Каждое обновление имеет номер версии и публикуется в AOSP.

Реализация

Если вы хотите реализовать внеполосные обновления, скачайте двоичный файл carrier_list.pb из AOSP. Чтобы посмотреть таблицу в удобном для чтения формате, перейдите на страницу carrier_list.textpb.

Поместите таблицу идентификаторов операторов в раздел данных /data/misc/carrierid/ устройства. Если таблица идентификаторов операторов связи новее существующей версии, устройство сохраняет ее в класс базы данных идентификаторов операторов связи. Самая актуальная информация из базы данных идентификаторов операторов связи извлекается с помощью общедоступных методов getSimCarrierId() и getSimCarrierIdName().

Добавьте в базу данных информацию об идентификаторе оператора связи.

Чтобы добавить или изменить идентификатор оператора в базе данных, отправьте запрос, используя форму для идентификационной информации оператора.

Ваш запрос будет рассмотрен, и в случае одобрения изменение будет добавлено в базу кода AOSP на сайте carrier_list.pb. Затем вы можете скопировать обновленный список и добавить его в свою сборку.

Как интегрировать идентификаторы операторов связи с CarrierConfig

Начиная с Android 10 конфигурация оператора поддерживает использование идентификаторов операторов в качестве ключей для получения конфигураций, относящихся к оператору, из CarrierService.

Интеграция идентификаторов операторов с платформой "CarrierConfig" дает следующие преимущества:

  • Объединяет все пары MCC/MNC для каждого оператора в одно место, удаляя дублирующиеся или несовместимые данные.
  • Создает канонический идентификатор для каждого оператора и устраняет неоднозначность.
  • Позволяет идентифицировать операторов мобильной виртуальной сети (MVNO) с помощью отдельных идентификаторов, а не с помощью конфигураций, являющихся частью оператора мобильной сети (MNO).

Как перенести данные конфигурации в идентификаторы операторов

Чтобы перенести данные конфигурации из пар MCC/MNC в идентификаторы операторов, выполните следующие действия:

  1. Группируйте файлы carrier_config_mccmnc.xml от одного оператора. Используйте carrier_list.textpb в качестве справочника для сопоставления информации о кодах MCC, MNC и MVNO с определенным оператором связи.

  2. Объедините конфигурации в один файл.

  3. (Необязательно) Наследуйте данные от операторов мобильной связи. MVNO наследуют конфигурации от MNO в устаревшем файле carrier_config_mccmnc.xml. Поскольку идентификаторы операторов позволяют всем операторам, включая MVNO, иметь специальный файл конфигурации, рекомендуется включить данные MNO во время переноса.

  4. Если конфигурация для идентификатора оператора MVNO отсутствует, получите конфигурацию для идентификатора оператора MNO с помощью getCarrierIdFromSimMccMnc.

  5. Переименуйте новый файл в carrier_config_carrierid_carrierid_carriername.xml, где carrierid должно соответствовать canonical_id, а carriername – carrier_name в carrier_list.textpb.