当前位置: 首页 > news >正文

【笔记】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
    //@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*/@SystemApipublic static final int ROAMING_TYPE_NOT_ROAMING = 0;/*** registered in a roaming network, but can not tell if it's domestic or international.* @hide*/@SystemApipublic static final int ROAMING_TYPE_UNKNOWN = 1;/*** registered in a domestic roaming network* @hide*/@SystemApipublic static final int ROAMING_TYPE_DOMESTIC = 2;/*** registered in an international roaming network* @hide*/@SystemApipublic 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>

相关文章:

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

一、SPN模块简介 【笔记】SPN和PLMN 运营商网络名称显示 Android U 配置 WiFiCalling 场景下PLMN/SPN 显示的代码逻辑介绍 【笔记】Android Telephony 漫游SPN显示定制&#xff08;Roaming Alpha Tag&#xff09; 二、相关配置字段 non_roaming_operator_string_array 是否…...

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型 Shepard模型(简称SP模型)就是一种直观的、可操作的相似预测法&#xff0c;常用于插值。相似预测法基本原理按照相似原因产生相似结果的原则&#xff0c;从历史样本中集中找出与现在的最相似的一…...

python工具方法 47 基于paddleseg将目标检测数据升级为语义分割数据

在进行项目研究时,通常需要搜集开源数据集。但是所能搜集到的数据集通常会存在形式上的差异,比如我想要的是语义分割数据,而搜集到的数据集却是目标检测数据;在这种情况下所搜集的数据就完成没有利用价值了么?不,其还存在价值,我们可以通过模型训练对数据标签的标注粒度…...

OpenJudge - 38:计算多项式的导函数

总时间限制: 1000ms 内存限制: 65536kB 描述 计算多项式的导函数是一件非常容易的任务。给定一个函数f(x)&#xff0c;我们用f(x)来表示其导函数。我们用x^n来表示x的n次幂。为了计算多项式的导函数&#xff0c;你必须知道三条规则&#xff1a; (1)、(C) 0 如果C是常量 (2)、…...

数据结构:顺序表(C++实现)

1 头文件 SeqList.h //SeqList.h #pragma once #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cassert> using namespace std; class SeqList { public://初始化SeqList();//销毁~SeqList();//头插void PushFront(int data);//头删void PopFront(…...

从零开始 TensorRT(7)C++ 篇:解析 ONNX

前言 学习资料&#xff1a; B站视频配套代码 cookbook 示例 参考源码&#xff1a;cookbook → 04-BuildEngineByONNXParser → pyTorch-ONNX-TensorRT 源码 C 代码量较多&#xff0c;已上传 GitHub OpenCV 安装&#xff1a; apt install libopencv-dev&#xff08;1&…...

k8s集群的CA证书过期处理

文章目录 制作延期的CA证书获取CA全名准备签发申请配置生成新CA验证并替换CA 更新master组件的CA配置kube-apiserverkube-controller-managerkube-schedulerkube-admin检查证书过期时间 更新ServiceAccount secret更新node组件配置的CA更新kubelet连接配置签发kubelet自动申请的…...

linuxOPS基础_linux系统注意事项

Linux严格区分大小写 Linux 和Windows不同&#xff0c;Linux严格区分大小写的&#xff0c;包括文件名和目录名、命令、命令选项、配置文件设置选项等。 例如&#xff0c;Win7 系统桌面上有文件夹叫做Test&#xff0c;当我们在桌面上再新建一个名为 test 的文件夹时&#xff0c…...

《探索虚拟与现实的边界:VR与AR谁更能引领未来?》

引言 在当今数字时代,虚拟现实(VR)和增强现实(AR)技术正以惊人的速度发展,并逐渐渗透到我们的日常生活中。它们正在重新定义人与技术、人与环境之间的关系,同时也为各行各业带来了全新的可能性。然而,究竟是VR还是AR更有潜力改变未来?本文将围绕这一问题展开深入探讨。…...

C++ 获取上一级文件夹路径

我们可能会经常遇到文件所在文件夹路径的问题&#xff0c;虽然各大平台也有提供方便快捷的API来实现&#xff0c;但是如果脱离平台本身&#xff0c;或者想实现跨平台的话&#xff0c;可以考虑用纯C的代码来实现这一需求 示例代码 #include <string> #include <ios…...

Apache Pulsar的分布式集群模式构建

1. 准备环境 6台带jdk8的Linux服务器&#xff08;CentOS7为例&#xff09; ip分别为&#xff1a; 主机名IP地址zookeeper1192.168.8.101zookeeper2192.168.8.102zookeeper3192.168.8.103pulsar1192.168.8.108pulsar2192.168.8.109pulsar3192.168.8.110 2. 下载Pulsar最新安…...

第三百八十六回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了Snackbar Widget相关的内容,本章回中将介绍TimePickerDialog Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在这里说的TimePickerDialog是一种弹出窗口&#xff0c;只不过窗口的内容固定显示…...

Java中介者模式剖析及使用场景

中介者模式 一、介绍二、智能家居系统项目实现三、总结1.优点2.缺点3.使用经验4.Spring框架类似使用思想 一、介绍 介者模式是一种行为型设计模式&#xff0c;它允许对象之间通过一个中介者对象进行通信&#xff0c;而不是直接相互引用。将多对多的关系转化为一对多的关系&…...

ElevenLabs用AI为Sora文生视频模型配音 ,景联文科技提供高质量真人音频数据集助力生成逼真音效

随着Open AI公司推出的Sora文生视频模型惊艳亮相互联网&#xff0c;AI语音克隆创企ElevenLabs又为Sora的演示视频生成了配音&#xff0c;所有的音效均由AI创造&#xff0c;与视频内容完美融合。 ElevenLabs的语音克隆技术能够从一分钟的音频样本中创建逼真的声音。为了实现这一…...

Go语言基础

Go的数据类型定义 //运行第一个程序package main func main(){print("Hello World") }在GO语言中&#xff0c;一个程序只能有一个main包&#xff0c;对应只能有一个main方法&#xff0c;若无法满足这个条件&#xff0c;编译时将会报错。注释方式与PHP相同 import的使…...

IOS覆盖率报告info文件解读

一&#xff0c;IOS覆盖率报告的生成 在做前端精准测试的时候&#xff0c;对于iOS端&#xff0c;通常会做如下操作&#xff1a; &#xff08;1&#xff09;合并覆盖率数据 如下操作&#xff1a; xcrun llvm-profdata merge coverage_file1657885040728.profraw coverage_fil…...

爬虫实战——scrapy框架爬取多张图片

scrapy框架的基本使用&#xff0c;请参考我的另一篇文章&#xff1a;scrapy框架的基本使用 起始爬取的网页如下&#xff1a; 点击每张图片&#xff0c;可以进入图片的详情页&#xff0c;如下&#xff1a; 代码实现&#xff1a; 项目文件结构如下 img_download.py文件代码 im…...

LLVM TableGen 系统学习笔记

Basic TableGen 系统可以帮助记录领域特定的信息。它也可以认为是一种小型的编译系统。 TableGen 责负分析文件&#xff0c; 分析结果交给领域特定的后端进行处理。 重要的概念 records 一个 record 有一个独立的名称&#xff0c;一系列值和一系列父类。 它保存了特定领域…...

基于stm32的流水灯设计

1基于stm32的流水灯设计[proteus仿真] 速度检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的自行车测速系统设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&#xff0c…...

kotlin图片合成和压缩

kotlin图片合成和压缩 之前的方法是继承AsyncTask 在doInBackground 里面去做压缩的操作&#xff0c;然后用 publishProgress 切到主线程里面更新 新方法是在协程里的去做 class ImageService {private fun getSumWidths(bitmaps: ArrayList<Bitmap>): Int {var sumWid…...

ollama部署本地大模型|embeddinggemma-300m教育场景落地:题库语义去重与推荐

ollama部署本地大模型&#xff5c;embeddinggemma-300m教育场景落地&#xff1a;题库语义去重与推荐 1. 引言&#xff1a;当老师遇到海量重复题 如果你是老师、教研员&#xff0c;或者在线教育平台的运营者&#xff0c;下面这个场景你一定不陌生&#xff1a; 题库里躺着几万…...

LightOnOCR-2-1B手把手教学:从零开始,打造你的智能文字提取工具

LightOnOCR-2-1B手把手教学&#xff1a;从零开始&#xff0c;打造你的智能文字提取工具 1. 为什么选择LightOnOCR-2-1B 在日常工作和学习中&#xff0c;我们经常需要从图片中提取文字内容。无论是扫描的文档、手机拍摄的笔记&#xff0c;还是网上下载的图片资料&#xff0c;手…...

AI Agent求职被拒最常见的原因是什么

这些实际上更像工程问题&#xff0c;公司愿意给30k月薪的原因就在这里&#xff0c;Agent开发不是玩具技术人&#xff0c;是能把玩具变成生产力的人。这环节最直接有效的方法就是跟着项目完整走一遍&#xff0c;如果你无从下手&#xff0c;趁着有大佬带队&#xff0c;你直接跟着…...

掌握Context Graph核心逻辑,小白程序员也能轻松入门大模型并收藏学习!

掌握Context Graph核心逻辑&#xff0c;小白程序员也能轻松入门大模型并收藏学习&#xff01; Context Graph是当前企业AI领域的热点&#xff0c;掌握其核心逻辑有助于程序员和企业AI从业者快速跟上发展。它通过记录企业决策路径与执行过程&#xff0c;弥补了传统数据平台只关注…...

[具身智能-364]:LeRobot 不是通用机器人控制系统(如 ROS2 导航/规划栈),而是专注于“感知-决策-动作”端到端学习的 AI 框架。他们共同成为具身智能时代最重要的开源基础设施之一

LeRobot 与 ROS2 并非替代关系&#xff0c;而是“智能生成”与“可靠执行”的双轨架构。二者共同构成了下一代机器人从“实验室原型”走向“物理世界部署”的基石。以下从定位差异、架构协同、融合挑战、演进趋势四个维度进行系统阐述。&#x1f50d; 一、核心定位与设计哲学&a…...

告别环境冲突!用Anaconda在PyCharm里为PyTorch项目创建独立的CUDA环境(保姆级图文)

深度学习工程师的终极武器&#xff1a;用Anaconda打造PyTorch项目的完美隔离环境 当你在深夜调试一个关键模型时&#xff0c;突然发现项目B的代码在项目A的环境中莫名其妙报错——这种场景对深度学习工程师来说再熟悉不过了。环境冲突就像编程世界里的"量子纠缠"&…...

Chrome Extension CLI完整指南:如何创建4种不同类型的浏览器扩展

Chrome Extension CLI完整指南&#xff1a;如何创建4种不同类型的浏览器扩展 【免费下载链接】chrome-extension-cli &#x1f680; The CLI for your next Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-extension-cli Chrome Extension CLI是…...

2025届毕业生推荐的降AI率平台横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 切实有效地降低知网AI检测率&#xff0c;为此特别建议采取下面这些策略&#xff1a;首先&…...

KirikiriTools:视觉小说游戏资源处理的终极开源解决方案

KirikiriTools&#xff1a;视觉小说游戏资源处理的终极开源解决方案 【免费下载链接】KirikiriTools Tools for the Kirikiri visual novel engine 项目地址: https://gitcode.com/gh_mirrors/ki/KirikiriTools KirikiriTools是一款专为Kirikiri视觉小说引擎设计的开源工…...

为什么Nuxt本地开发会收到Chrome DevTools的请求?深入解析与两种解决方案

为什么Nuxt本地开发会收到Chrome DevTools的请求&#xff1f;深入解析与两种解决方案 在Nuxt.js本地开发过程中&#xff0c;不少开发者都遇到过这样一个现象&#xff1a;控制台频繁出现/.well-known/appspecific/com.chrome.devtools.json路径的404警告。这看似无害的提示背后&…...