【笔记】Android 漫游定制SPN定制有关字段

一、SPN模块简介

【笔记】SPN和PLMN 运营商网络名称显示

Android U 配置 WiFiCalling 场景下PLMN/SPN 显示的代码逻辑介绍

【笔记】Android Telephony 漫游SPN显示定制(Roaming Alpha Tag)

二、相关配置字段

  • non_roaming_operator_string_array 是否视为非漫游
  • spn_display_condition_override_int 
  • opl_override_opl_string_array 覆写卡文件EF_OPL("plmn1,lactac_start,lactac_end,index")
  • pnn_override_string_array 覆写卡文件EF_PNN("alpha_long1,alpha_short1")

CarrierConfigManager 定义

frameworks/base/telephony/java/android/telephony/CarrierConfigManager.java

CarrierConfig-non_roaming_operator_string_array
【定义】CarrierConfig-non_roaming_operator_string_array​​​​​
CarrierConfig-spn_display_condition_override_int
【定义】CarrierConfig-spn_display_condition_override_int
【定义】CarrierConfig - opl_override_opl_string_array
【定义】CarrierConfig - opl_override_opl_string_array
【定义】CarrierConfig - pnn_override_string_array
【定义】CarrierConfig - pnn_override_string_array

三、需求场景及功能代码

漫游场景

漫游情况一般分为国内漫游和国际漫游(),一般国内漫游认为在国内,国际漫游在国外。

不清楚漫游到国内外的情况时,可以通过底层上报获取状态,接口getDataRoamingType()

frameworks/base/telephony/java/android/telephony/ServiceState.java (androidxref.cn android-14.0.0_r18)

frameworks

【代码】接口getDataRoamingType
【API】getDataRoamingType

漫游状态字段

Roming Type 定义及映射关系
ROAMING_TYPE_ num Function
ROAMING_TYPE_NOT_ROAMING 0 本地网络home
ROAMING_TYPE_UNKNOWN 1 漫游但不能判断类型 domestic or international.
ROAMING_TYPE_DOMESTIC 2 国内漫游 domestic
ROAMING_TYPE_INTERNATIONAL 3 国际漫游  international
    //@Retention注解标记了该注解的保留策略,即 SOURCE。
    //编译器在编译过程中会忽略@Retention注解,即编译后的代码中不会出现Retention。
    //@Retention注解的作用是为了给静态分析工具提供元数据。
    //@IntDef一个定义在 Android SDK 中的注解,用于告诉静态分析工具这个枚举类型 RoamingType 的取值范围,它包括一个 prefix 和一个 value。其中,prefix 参数指定了枚举值的前缀,这是为了避免与其他枚举类型的取值冲突;value 参数指定了枚举类型的所有可能取值。

    /** @hide */
    @Retention(RetentionPolicy.SOURCE) 
    @IntDef(prefix = { "ROAMING_TYPE_" }, value = {
            ROAMING_TYPE_NOT_ROAMING,
            ROAMING_TYPE_UNKNOWN,
            ROAMING_TYPE_DOMESTIC,
            ROAMING_TYPE_INTERNATIONAL
    })
    //定义了一个注解类型 RoamingType,它实际上是一个注解类的声明。
    //作用:可以在其他代码中使用该注解来表示 RoamingType 类型的值。
    public @interface RoamingType {}

    /**
     * Not roaming, registered in home network.
     * @hide
     */
    @SystemApi
    public static final int ROAMING_TYPE_NOT_ROAMING = 0;
    /**
     * registered in a roaming network, but can not tell if it's domestic or international.
     * @hide
     */
    @SystemApi
    public static final int ROAMING_TYPE_UNKNOWN = 1;
    /**
     * registered in a domestic roaming network
     * @hide
     */
    @SystemApi
    public static final int ROAMING_TYPE_DOMESTIC = 2;
    /**
     * registered in an international roaming network
     * @hide
     */
    @SystemApi
    public static final int ROAMING_TYPE_INTERNATIONAL = 3;

四、开发方案

  1. 将non_roaming_operator_string_array配置成false,则指定漫游到的mccmnc会视为home网,不会显示plmn,以spn为准。
  2. carrier_name_string和carrier_name_override_bool 配套配置实现overlay
  3. 对于漫游时,定制OPL(opl_override_opl_string_array)

比如针对cid=1952的卡,原始配置:packages/apps/CarrierConfig/assets/carrier_config_carrierid_1952_US-Cellular.xml

定制配置如下:/packages/apps/CarrierConfig/res/xml/vendor.xml

    <carrier_config cid="1952" name="U.S. Cellular">
        <string name="carrier_name_string">UScellular</string>
        <boolean name="carrier_name_override_bool" value="true"/>
        <!--plmn1,lactac_start,lactac_end,index"-->
        <string-array name="opl_override_opl_string_array" num="24">
            <item value="311580,0,65535,0" />
            <item value="311581,0,65535,0" />
            <item value="311582,0,65535,0" />
            <item value="311583,0,65535,0" />
            <item value="311584,0,65535,0" />
            <item value="311585,0,65535,0" />
            <item value="311586,0,65535,0" />
            <item value="311587,0,65535,0" />
            <item value="311588,0,65535,0" />
            <item value="311589,0,65535,0" />
            <item value="311220,0,65535,0" />
            <item value="311221,0,65535,0" />
            <item value="311222,0,65535,0" />
            <item value="311223,0,65535,0" />
            <item value="311224,0,65535,0" />
            <item value="311225,0,65535,0" />
            <item value="311226,0,65535,0" />
            <item value="311227,0,65535,0" />
            <item value="311228,0,65535,0" />
            <item value="311229,0,65535,0" />
            <item value="310120,0,65535,0" />
            <item value="312420,0,65535,0" />
            <item value="311480,0,65535,0" />
            <item value="310410,0,65535,0" />
        </string-array>
        <string-array name="pnn_override_string_array" num="1">
            <item value="UScelluar" />
        </string-array>
    </carrier_config>

相关推荐

  1. 笔记】EF文件中定义SPN显示协议规则

    2024-03-10 23:52:06       30 阅读
  2. Android RadioButton,定制按钮样式

    2024-03-10 23:52:06       32 阅读
  3. 笔记Android MVNO APN 字段配置方法

    2024-03-10 23:52:06       27 阅读
  4. react--自定义列表字段

    2024-03-10 23:52:06       56 阅读
  5. Android Google 开机向导定制 setup wizard

    2024-03-10 23:52:06       42 阅读
  6. 华为配置敏捷分布式SFN漫游实验

    2024-03-10 23:52:06       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 23:52:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 23:52:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 23:52:06       82 阅读
  4. Python语言-面向对象

    2024-03-10 23:52:06       91 阅读

热门阅读

  1. uniapp——信号值组件(vue3)

    2024-03-10 23:52:06       41 阅读
  2. React-Context机制

    2024-03-10 23:52:06       39 阅读
  3. websocket+心跳

    2024-03-10 23:52:06       47 阅读
  4. uniapp 开发app,如何使用模拟器

    2024-03-10 23:52:06       40 阅读
  5. linux系统安装docker

    2024-03-10 23:52:06       33 阅读
  6. CatBoost高级教程:分布式训练与大规模数据处理

    2024-03-10 23:52:06       38 阅读
  7. Linux运维_Bash脚本_编译安装Mesa-23.3.6(OpenGL)

    2024-03-10 23:52:06       32 阅读
  8. 从零开始 TensorRT(7)C++ 篇:解析 ONNX

    2024-03-10 23:52:06       44 阅读
  9. 云贝福利课程倒计时-Oracle小课

    2024-03-10 23:52:06       32 阅读