码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【笔记】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_numFunction
    ROAMING_TYPE_NOT_ROAMING0本地网络home
    ROAMING_TYPE_UNKNOWN1漫游但不能判断类型 domestic or international.
    ROAMING_TYPE_DOMESTIC2国内漫游 domestic
    ROAMING_TYPE_INTERNATIONAL3国际漫游  international
    1. //@Retention注解标记了该注解的保留策略,即 SOURCE。
    2. //编译器在编译过程中会忽略@Retention注解,即编译后的代码中不会出现Retention。
    3. //@Retention注解的作用是为了给静态分析工具提供元数据。
    4. //@IntDef一个定义在 Android SDK 中的注解,用于告诉静态分析工具这个枚举类型 RoamingType 的取值范围,它包括一个 prefix 和一个 value。其中,prefix 参数指定了枚举值的前缀,这是为了避免与其他枚举类型的取值冲突;value 参数指定了枚举类型的所有可能取值。
    5. /** @hide */
    6. @Retention(RetentionPolicy.SOURCE)
    7. @IntDef(prefix = { "ROAMING_TYPE_" }, value = {
    8. ROAMING_TYPE_NOT_ROAMING,
    9. ROAMING_TYPE_UNKNOWN,
    10. ROAMING_TYPE_DOMESTIC,
    11. ROAMING_TYPE_INTERNATIONAL
    12. })
    13. //定义了一个注解类型 RoamingType,它实际上是一个注解类的声明。
    14. //作用:可以在其他代码中使用该注解来表示 RoamingType 类型的值。
    15. public @interface RoamingType {}
    16. /**
    17. * Not roaming, registered in home network.
    18. * @hide
    19. */
    20. @SystemApi
    21. public static final int ROAMING_TYPE_NOT_ROAMING = 0;
    22. /**
    23. * registered in a roaming network, but can not tell if it's domestic or international.
    24. * @hide
    25. */
    26. @SystemApi
    27. public static final int ROAMING_TYPE_UNKNOWN = 1;
    28. /**
    29. * registered in a domestic roaming network
    30. * @hide
    31. */
    32. @SystemApi
    33. public static final int ROAMING_TYPE_DOMESTIC = 2;
    34. /**
    35. * registered in an international roaming network
    36. * @hide
    37. */
    38. @SystemApi
    39. 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

    1. <carrier_config cid="1952" name="U.S. Cellular">
    2. <string name="carrier_name_string">UScellularstring>
    3. <boolean name="carrier_name_override_bool" value="true"/>
    4. <string-array name="opl_override_opl_string_array" num="24">
    5. <item value="311580,0,65535,0" />
    6. <item value="311581,0,65535,0" />
    7. <item value="311582,0,65535,0" />
    8. <item value="311583,0,65535,0" />
    9. <item value="311584,0,65535,0" />
    10. <item value="311585,0,65535,0" />
    11. <item value="311586,0,65535,0" />
    12. <item value="311587,0,65535,0" />
    13. <item value="311588,0,65535,0" />
    14. <item value="311589,0,65535,0" />
    15. <item value="311220,0,65535,0" />
    16. <item value="311221,0,65535,0" />
    17. <item value="311222,0,65535,0" />
    18. <item value="311223,0,65535,0" />
    19. <item value="311224,0,65535,0" />
    20. <item value="311225,0,65535,0" />
    21. <item value="311226,0,65535,0" />
    22. <item value="311227,0,65535,0" />
    23. <item value="311228,0,65535,0" />
    24. <item value="311229,0,65535,0" />
    25. <item value="310120,0,65535,0" />
    26. <item value="312420,0,65535,0" />
    27. <item value="311480,0,65535,0" />
    28. <item value="310410,0,65535,0" />
    29. string-array>
    30. <string-array name="pnn_override_string_array" num="1">
    31. <item value="UScelluar" />
    32. string-array>
    33. carrier_config>

  • 相关阅读:
    运行django
    HTML+CSS+JavaScript仿京东购物网站制作 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
    C++ signed int 在计算机内部表示
    ssm基于角色访问控制的文件共享系统毕业设计源码161821
    Python获取Window系统注册表安装的软件,再卸载软件
    牛客项目(五)-使用kafka实现发送系统通知
    明明加了唯一索引,为什么还是产生了重复数据?
    访客登记信息不全?线上预约成新潮流
    解决虚拟机磁盘满了,无法上传文件,给虚拟机扩容问题
    【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍
  • 原文地址:https://blog.csdn.net/qq_38666896/article/details/136479808
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号