android 10以上版本5G信号TAC、PCI、RSRP、RSRQ、SINR等数据获取

  • 前言
  • 一、TAC、PCI数据获取
  • 二、RSRP、RSRQ、SINR数据获取

前言

之前有个APP用到了获取TAC、PCI、RSRP、RSRQ、SINR等信息,4G网络已经适配过,但是5G信号的情况下会报错,发现是5G信号下,获取的方式变了,但是查了许多相关资料,也没找到相关方法,最后没办法只能看相关源码了,最后在源码里找到了相关方法,用反射获取到了,在这记录下

一、TAC、PCI数据获取

以下CellIdentityNr 也能获取到RSRP、RSRQ、SINR,但是获取到的数据不对,需要用第二点里面的方式获取

//telephonyManager 自己创建一个哈,就不写了
List<CellInfo> allCellInfo = telephonyManager.getAllCellInfo();
if (allCellInfo != null && allCellInfo.size() > 0) {CellInfo info = allCellInfo.get(0);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {// 5Gif (info instanceof CellInfoNr) {CellIdentityNr nr = (CellIdentityNr) ((CellInfoNr) info).getCellIdentity();CellSignalStrengthNr nrStrength = (CellSignalStrengthNr) ((CellInfoNr) info).getCellSignalStrength();nr.getTac();nr.getPci();Log.i("nrgsm", "CellIdentityNr-" + nr.toString());}}
}

二、RSRP、RSRQ、SINR数据获取

//获取TelephonyManager
TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
int mPhoneRatType = mTelephonyManager.getNetworkType();
//创建监听
PhoneStateListener mPhoneStateListener = new PhoneStateListener() {private String[] mPara = null;@SuppressWarnings("unchecked")@Overridepublic void onSignalStrengthsChanged(SignalStrength sStrength) {if (mPhoneRatType == TelephonyManager.NETWORK_TYPE_NR) {/* 5G状态下获取 */try {Class<?> obj = Class.forName("android.telephony.SignalStrength");Method method = obj.getDeclaredMethod("getCellSignalStrengths");method.setAccessible(true);List<CellSignalStrength> cellListStrengths = (List<CellSignalStrength>) method.invoke(sStrength);if (cellListStrengths != null && cellListStrengths.size() > 0) {for (CellSignalStrength o : cellListStrengths) {if (o instanceof CellSignalStrengthNr) {CellSignalStrengthNr nr = (CellSignalStrengthNr) o;nr.getSsRsrp();nr.getSsRsrq();nr.getSsSinr();}}}// System.out.println(field.getName()+":"+field.get(obj.newInstance()));} catch (Exception e) {e.printStackTrace();}return;}if (mPhoneRatType == TelephonyManager.NETWORK_TYPE_LTE) {/* 4G状态下获取 */try {(Integer) sStrength.getClass().getMethod("getLteRsrp").invoke(sStrength);//LteRsrp(Integer) sStrength.getClass().getMethod("getLteRsrq").invoke(sStrength);//LteRsrq(Integer) sStrength.getClass().getMethod("getLteRssnr").invoke(sStrength);//LteRssnr// serverCellInfo.cqi = (Integer) sStrength.getClass()// .getMethod("getLteCqi").invoke(sStrength);} catch (Exception e) {e.printStackTrace();}return;}/* 其他状态下获取 */int mGSMSignal = sStrength.getGsmSignalStrength();String[] mPara = sStrength.toString().split(" ");Integer.parseInt(mPara[9]);//RSRPtry {Field f = SignalStrength.class.getDeclaredField("mLteRsrq");Field f2 = SignalStrength.class.getDeclaredField("mLteRssnr");// mLteSignalStrenthf.setAccessible(true);f2.setAccessible(true);Integer.parseInt(f.get(sStrength).toString());//RSRQ int rsinr = Integer.parseInt(f2.get(sStrength).toString());//SINR//适配华为个别手机if (!Build.MODEL.contains("HUAWEI MT7")&& !Build.MODEL.contains("HUAWEI P7")&& !Build.MODEL.contains("HUAWEI D2")&& !Build.MODEL.contains("HUAWEI MT2")) {mLTESINR = rsinr % 10 != 0 ? rsinr / 10: (rsinr / 10) + 1;}int tempSinr = (Integer) sStrength.getClass().getMethod("getLteRssnr").invoke(sStrength);} catch (Exception e) {e.printStackTrace();}}};
// 开始监听
if (mTelephonyManager != null) {mTelephonyManager.listen(mPhoneStateListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}

android 10以上版本5G信号TAC、PCI等数据获取相关推荐

  1. android增加5G热点,运营商甘拜下风:Android 11将划分5G信号新层次

    原标题:运营商甘拜下风:Android 11将划分5G信号新层次 5G市场的发展给我们带来了不少的影响,并且目前5G也已经正式进入商用阶段,各电信运营商相对应的都推出了体验5G套餐的服务.但我们手机上 ...

  2. android 10.0版本合入GMS包

    gms包集成步骤: (1) 需要下载对应gms,国内需要通过VPN下载.下载后解压,文件目录:partner_gms.下载时,最好核对一下匹配的android版本. (2)依照路径打开gms.mk/g ...

  3. 谷歌开发者大会焦点:大中华区新掌门亮相,Android 10原生支持5G,TF2.0大更新...

      新智元报道   编辑:鹏飞.大明.张佳 [新智元导读]为期两天的2019谷歌开发者大会刚刚落下帷幕,谷歌推出了最新的Android 10.TensorFlow 2.0.Flutter 1.9等产品 ...

  4. Android 10 正式版本或将于 9 月 3 日推出

    根据 phonearena 的报道,他们向两位谷歌支持团队的成员分别确认 Android 10 的发布日期,得到的答复都是 2019 年 9 月 3 日.也就是说,如果信息准确无误的话,Android ...

  5. 谷歌开发者大会焦点:TensorFlow.js可制作微信小程序,Android 10原生支持5G,TF2.0大更新...

    2016 年谷歌开发者大会在中国首次举办,2017 年谷歌宣布成立"AI 中国研发中心",2018年谷歌的"AI+小程序"的产物"猜画小歌" ...

  6. Android 10 原生支持 5G!

    在美国时间9月3日,谷歌发布了Android 10正式版,经过了一年多的开发和早期使用者的数个月的测试,Android10正式版终于发布了,其聚焦移动创新.安全隐私和数字健康, 具体体现为: 移动创新 ...

  7. 浅谈android应用之版本特性

    文章目录 1. 前言 2. 版本介绍 2.1 Android 2.2 Froyo 2.2 Android 3.0 Honeycomb 2.3 Android 4.0 Ice Cream Sandwic ...

  8. Android10剪贴板,剪纸堆 Clip Stack - 轻量级剪贴板管理程序(支持 Android 10)

    编辑点评 剪贴板的历史记录这么看 剪纸堆 Clip Stack - 轻量级剪贴板管理程序(支持 Android 10) 介绍 剪纸堆 Clip Stack - 轻量级剪贴板管理程序(支持 Androi ...

  9. Android 10.0 系统服务之ActivityMnagerService-AMS启动流程-[Android取经之路]

    摘要:上一节我们讲完了SystemServer的启动过程,这一节接着上一节的步骤,来讲解ActivityManagerService的启动过程. ActivityManagerService简称AMS ...

最新文章

  1. 从高铁事故到软件系统的可靠性
  2. 表格中的border-spacing与border
  3. 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]
  4. 编译安装php之安装libiconv-1.14.tar.gz出错解决方法
  5. 那个好好玩的特效,每个人都可以做到哦
  6. python数据抓取课程_Python爬虫入门教程 21-100 网易云课堂课程数据抓取
  7. 使用pp架构形成计算机集群请求的地址无效_干货!史上最详细脑图《大型网站技术架构》...
  8. 提高计算机水平的小技巧,五大电脑小技巧
  9. css3中的变形(transform)、过渡(transtion)、动画(animation)
  10. 语音的基本概念--译自CMU sphinx
  11. Swift 全功能的绘图板开发
  12. c 语言中 %是什么运算符,C 语言基础----详解C中的运算符
  13. 使用markdown编辑器(自用,没内容。。)
  14. python字符串转整数_Python连接字符串和整数
  15. Spring——Java程序员的春天
  16. TypeError: Fetch argument has invalid type class ‘numpy.float32‘, must be a string or Tensor
  17. dom影像图形成数字地形图_数字地形图等高线怎么生成(海地软件地形图数字化高层数据层怎么选择,在哪里...)...
  18. 详解 http-server的安装和使用
  19. NNI speedup_model()代码笔记
  20. COBOL语法和文法(2)

热门文章

  1. android自动实例化的网站,Appium安卓自动化从入门到入土踩坑实践(五)第一个自动化脚本...
  2. [转帖] 百度百科 sino
  3. 彻底理解move 操作
  4. DS1302的使用说明
  5. sig值怎么计算_sig计算示例
  6. 差分进化算法原理及优化应用
  7. 南非世界杯 小组赛 南非vs法国
  8. cesium 自由移动的小人
  9. oracle wip 拆解工单 操作_WIP制造成本详解.ppt
  10. 优质网站资源推荐2.0