Android获取sim卡频段信息

公司一些Android设备,在交给客户使用时,需要使用sim卡网络,但是有时候网络不好,要给客户证据说明是网络问题,一个办法是网络测速,还有就是获取一下频段信息,根据这个信息可以和中国移动沟通问题来源,比如在某些地方,移动只部署了一两个频段,而有的频段速度快,有的频段速度慢,所以可以通过频段信息判断网络问题。

查询结果示例:TDD B34(36275),这里显示频段为 TDD B34频段,频点为36275。示例代码如下(注:本代码在5G频段换算时仅写了中国移动N41、N79、N28频段,其它5G频段的没写),tm.serviceState这个API是Android 8.0 才出的,在低版本的话也可以用反射试一下,看是否只是未公开,且这个API需要READ_PHONE_STATEACCESS_FINE_LOCATION权限。

fun getBandInfo() {
    val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
    val serviceState = tm.serviceState ?: return
    val channelNumber = serviceState.channelNumber
    val duplexMode = serviceState.duplexMode
    val band = getBand(channelNumber)
    val mode = getMode(duplexMode)
    Log.i("MainActivity","$mode $band($channelNumber)")
}
fun getMode(mode: Int) : String {
    return when (mode) {
        1 -> "FDD"
        2 -> "TDD"
        else -> "未知duplexMode: $mode"
    }
}
fun getBand(EARFCN: Int): String {
    var band = nrarfcnToBand(EARFCN)
    if (band != -1) return "N$band"
    band = earfcnToBand(EARFCN)
    if (band != -1) return "B$band"
    return "$EARFCN"
}
fun nrarfcnToBand(nrarfcn: Int): Int {
    val band = when(nrarfcn) {
        in 499200 .. 537999 -> 41
        in 693334 .. 733334 -> 79
        in 272010 ..276660 -> 28
        else -> -1
    }
    return band
}
fun earfcnToBand(EARFCN: Int): Int {
    val band = when (EARFCN) {
        in 0 until 600, in 18000 until 18600 -> 1
        in 600 until 1200, in 18600 until 19200 -> 2
        in 1200 until 1950, in 19200 until 19950 -> 3
        in 1950 until 2400, in 19950 until 20400 -> 4
        in 2400 until 2650, in 20400 until 20650 -> 5
        in 2650 until 2750, in 20650 until 20750 -> 6
        in 2750 until 3450, in 20750 until 21450 -> 7
        in 3450 until 3800, in 21450 until 21800 -> 8
        in 3800 until 4149, in 21800 until 22149 -> 9
        in 4150 until 4750, in 22150 until 22745 -> 10
        in 4750 until 4950, in 22750 until 22950 -> 11
        in 5010 until 5180, in 23010 until 23180 -> 12
        in 5180 until 5280, in 23180 until 23280 -> 13
        in 5280 until 5380, in 23280 until 23379 -> 14
        in 5730 until 5850, in 23730 until 23850 -> 17
        in 5850 until 6000, in 23850 until 24000 -> 18
        in 6000 until 6150, in 24000 until 24150 -> 19
        in 6150 until 6450, in 24150 until 24450 -> 20
        in 6450 until 6600, in 24450 until 24600 -> 21
        in 6600 until 7400, in 24600 until 25399 -> 22
        in 7500 until 7700, in 25500 until 25699 -> 23
        in 7700 until 8040, in 25700 until 26040 -> 24
        in 8040 until 8690, in 26040 until 26690 -> 25
        in 8690 until 9040, in 26690 until 27040 -> 26
        in 9040 until 9209, in 27040 until 27210 -> 27
        in 9210 until 9660, in 27210 until 27660 -> 28
        in 36000 until 36200 -> 33
        in 36200 until 36350 -> 34
        in 36350 until 36950 -> 35
        in 36950 until 37550 -> 36
        in 37550 until 37750 -> 37
        in 37750 until 38250 -> 38
        in 38250 until 38650 -> 39
        in 38650 until 39650 -> 40
        in 39650 until 41590 -> 41
        in 41590 until 43590 -> 42
        in 43590 until 45590 -> 43
        in 45590 until 46590 -> 44
        else -> -1
    }
    return band
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/941201.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vscode 快速切换cangjie版本

前言 目前阶段cangjie经常更新,这就导致我们可能会需要经常在不同的版本之间切换。 在参加训练营时从张老师那学到了如何使用 vscode 的配置文件来快速进行cangjie版本的切换。 推荐一下张老师的兴趣组 SIGCANGJIE / 仓颉兴趣组 这里以 windows 下,配置…

RCE总结

文章目录 常见漏洞执行函数:1.系统命令执行函数2.代码执行函数 命令拼接符读取文件命令绕过:空格过滤绕过关键字绕过长度过滤绕过无参数命令执行绕过无字母数字绕过利用%0A截断利用回溯绕过利用create_function()代码注入无回显RCE1.反弹shell2.dnslog外…

springmvc的拦截器,全局异常处理和文件上传

拦截器: 拦截不符合规则的,放行符合规则的。 等价于过滤器。 拦截器只拦截controller层API接口。 如何定义拦截器。 定义一个类并实现拦截器接口 public class MyInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest reque…

前端知识补充—HTML

1. HTML 1.1 什么是HTML HTML(Hyper Text Markup Language), 超⽂本标记语⾔ 超⽂本: ⽐⽂本要强⼤. 通过链接和交互式⽅式来组织和呈现信息的⽂本形式. 不仅仅有⽂本, 还可能包含图⽚, ⾳频, 或者⾃已经审阅过它的学者所加的评注、补充或脚注等等 标记语⾔: 由标签构成的语⾔…

vscode 使用说明

文章目录 1、文档2、技巧显示与搜索宏定义和包含头文件 3、插件4、智能编写5、VSCode 与 C(1)安装(2)调试(a)使用 CMake 进行跨平台编译与调试(b)launch.json(c&#xff…

Python的3D可视化库【vedo】2-5 (plotter模块) 坐标转换、场景导出、添加控件

文章目录 4 Plotter类的方法4.7 屏幕和场景中的坐标点转换4.7.1 屏幕坐标转为世界坐标4.7.2 世界坐标转为屏幕坐标4.7.3 屏幕坐标取颜色 4.8 导出4.8.1 导出2D图片4.8.2 导出3D文件 4.9 添加控件4.9.1 添加内嵌子窗口4.9.2 添加选择区4.9.3 添加比例尺4.9.4 为对象添加弹出提示…

Gin-vue-admin(1):环境配置和安装

目录 环境配置如果443网络连接问题,需要添加代理服务器 后端运行前端运行 环境配置 git clone https://gitcode.com/gh_mirrors/gi/gin-vue-admin.git到server文件目录下 go mod tidygo mod tidy 是 Go 语言模块系统中的一个命令,用于维护 go.mod 文件…

【CSS in Depth 2 精译_088】第五部分:添加动效概述 + 第 15 章:CSS 过渡特效概述 + 15.1:状态间的由此及彼

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第五部分 添加动效 ✔️【第 15 章 过渡】 ✔️ 15.1 状态间的由此及彼 ✔️15.2 定时函数 文章目录 第 5 部分 添加动效 Adding motion第 15 章 过渡 Transitions15.1 状态间的由此及彼 From here…

【翻译】大型 Transformer 模型推理优化

翻译原文:Large Transformer Model Inference Optimization | LilLog 原文作者:Lilian Weng 目录 方法概述蒸馏 Distillation量化 Quantization Transformer 量化的挑战训练后量化 (PTQ) 混合精度量化 Mixed-precision quantization细粒度量化量化的二…

【Leecode】Leecode刷题之路第88天之合并两个有序数组

题目出处 88-合并两个有序数组-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 88-合并两个有序数组-官方解法 方法1:直接合并后排序 思路: 代码示例&#xff1a…

Java图片拼接

最近遇到一个挺离谱的功能,某个表单只让上传一张图,多图上传会使导出失败。跟开发沟通后表示,这个问题处理不了。我... 遂自己思考,能否以曲线救国的方式拯救一下,即不伤及代码之根本,又能解决燃眉之急。灵…

bridge between Lua world and the .NET

一、新建项目&#xff1a;luademo 安装包&#xff1a;<PackageReference Include"NLua" Version"1.7.3" /> using NLua; using System;namespace luademo {internal class Program{static void Main(string[] args){Lua state new Lua();for (int …

跟着问题学23番外——反向传播算法理论(1)

前向传播与反向传播 在单层神经网络的优化算法里&#xff0c;我们讲到优化算法是为了寻找模型参数使得网络的损失值最小&#xff0c;这里详细介绍一下应用的基础——反向传播算法。 在神经网络中&#xff0c;梯度计算是通过反向传播算法来实现的。反向传播算法用于计算损失函…

Liveweb视频融合共享平台在果园农场等项目中的视频监控系统搭建方案

一、背景介绍 在我国的大江南北遍布着各种各样的果园&#xff0c;针对这些地处偏僻的果园及农场等环境&#xff0c;较为传统的安全防范方式是建立围墙&#xff0c;但是仅靠围墙仍然无法阻挡不法分子的有意入侵和破坏&#xff0c;因此为了及时发现和处理一些难以察觉的问题&…

华为IPD流程6大阶段370个流程活动详解_第二阶段:计划阶段 — 86个活动

华为IPD流程涵盖了产品从概念到上市的完整过程,各阶段活动明确且相互衔接。在概念启动阶段,产品经理和项目经理分析可行性,PAC评审后成立PDT。概念阶段则包括产品描述、市场定位、投资期望等内容的确定,同时组建PDT核心组并准备项目环境。团队培训涵盖团队建设、流程、业务…

开源轮子 - EasyExcel01(核心api)

EasyExcel01 - 核心api 本文整理自掘金大佬 - 竹子爱熊猫 https://juejin.cn/post/7405158045662576640 文章目录 EasyExcel01 - 核心api一&#xff1a;初相识EasyExcel1&#xff1a;写入excel入门2&#xff1a;读取Excel入门 二&#xff1a;数据模型注解1&#xff1a;读写通用…

实验13 C语言连接和操作MySQL数据库

一、安装MySQL 1、使用包管理器安装MySQL sudo apt update sudo apt install mysql-server2、启动MySQL服务&#xff1a; sudo systemctl start mysql3、检查MySQL服务状态&#xff1a; sudo systemctl status mysql二、安装MySQL开发库 sudo apt-get install libmysqlcli…

【java基础系列】实现数字的首位交换算法

在java中&#xff0c;手写实现一个数字的首位交换算法实现 实现效果 实现代码 核心业务代码 public static void main(String[] args) {int[] arr {1,2,3,4,5};int temp arr[0];for (int i 0; i < arr.length; i) {System.out.print(arr[i]);}System.out.println(&quo…

kubeadm一键部署K8S 集群架构

kubeadm一键部署K8S 集群架构(centos7) https://www.k8src.cn/ https://kubernetes.io/zh-cn/docs/home/ https://blog.csdn.net/m0_58709145/article/details/140128179 https://blog.csdn.net/jiaqijiaqi666/article/details/129745828 Kubeadm init报错[ERROR CRI]: contai…

【LeetCode: 876. 链表的中间结点 + 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…