识别运营商

搭载 Android 9 的设备可以识别订阅运营商信息,以便提供相应 ID 和运营商名称。Android 维护着一个运营商 ID 数据库,该数据库采用每个运营商对应其唯一运营商 ID 的匹配规则。AOSP 在 carrier_list.textpb 文件中包含运营商 ID 数据库的内容。统一的数据库有助于最大限度地减少需要识别运营商的应用内的重复逻辑,并限制暴露可用于识别运营商的属性。

为了更准确地识别更多运营商,Android 支持带外运营商 ID 表更新。每个更新版本都会有一个版本号,并会发布到 AOSP。

实现

想要实现带外更新的用户可以从 AOSP 下载 carrier_list.pb 二进制文件。如需查看该表的用户可读懂格式,请参阅 carrier_list.textpb

将运营商 ID 表放到设备的 /data/misc/carrierid/ 数据分区中。如果运营商 ID 表新于现有版本,则设备会将该表保留到运营商 ID 数据库类中。运营商 ID 数据库中的最新信息会通过公共方法 getSimCarrierId()getSimCarrierIdName() 获取。

向数据库添加运营商 ID 信息

要向数据库添加运营商 ID 或更新其中的运营商 ID,请使用运营商标识信息表单提交申请。

我们会审核您的申请,如果予以批准,则会将更改推送到 AOSP 代码库的 carrier_list.pb。接下来,您可以复制更新列表并将其整合到您的自定义 build 中。

将运营商 ID 与 CarrierConfig 集成

从 Android 10 开始,运营商配置支持将运营商 ID 用作密钥,从 CarrierService 获取运营商专属配置。

将运营商 ID 与 CarrierConfig 集成具有以下优势:

  • 将每个运营商的所有 MCC/MNC 对整合到一个位置,从而消除重复或不一致的数据。
  • 为每个运营商创建规范标识符并消除歧义。
  • 允许使用单独的 ID 标识移动虚拟网络运营商 (MVNO),而不是将配置作为移动网络运营商 (MNO) 的一部分。

将配置数据迁移到运营商 ID

要将配置数据从 MCC/MNC 对迁移到运营商 ID,请按以下步骤操作:

  1. 将单个运营商的 carrier_config_mccmnc.xml 文件组合在一起。使用 carrier_list.textpb 作为参考,将 MCC、MNC 和 MVNO 信息映射到特定运营商。

  2. 将配置合并到单个文件中。

  3. (可选)从 MNO 沿用数据。MVNO 从旧版 carrier_config_mccmnc.xml 文件中的 MNO 沿用配置。由于运营商 ID 允许包括 MVNO 在内的所有运营商拥有专属配置文件,因此建议在迁移期间包含 MNO 数据。

  4. 如果 MVNO 运营商 ID 的配置不存在,请使用 getCarrierIdFromSimMccMnc 从其 MNO 运营商 ID 中获取配置。

  5. 将新文件重命名为 carrier_config_carrierid_carrierid_carriername.xml,其中 carrierid 必须对应于 canonical_idcarriername 应对应于 carrier_list.textpb 中的 carrier_name