做一波获取手机卡LET的信息操作。看了一波源码写出来的一些东西

首先需要的一些权限(危险权限动态获取一下,之前的里面有):

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

//首先获取手机管理者类

tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

//获取设备编号

tm.getDeviceId();

//SIM卡提供商的ISO国家代码

tm.getSimCountryIso();

//获取SIM卡序列号

tm.getSimSerialNumber();

//获取网络运营商代号(MCC+MNC)

tm.getNetworkOperator();

//获取网络运营商名称

tm.getNetworkOperatorName();

//获取设备当前所在位置

tm.getCellLocation();

//获取cId,lac,psc,基于位置信息获取

CellLocation cellLocation = tm.getCellLocation();
if(cellLocation instanceof GsmCellLocation) {GsmCellLocation location = (GsmCellLocation)cellLocation;int cid = location.getCid();int lac = location.getLac();int psc = location.getPsc();
}

//获取手机类型

tm.getPhoneType();

//获取手机号码

tm.getLine1Number();

//获取国际长途区号

tm.getNetworkCountryIso();

//获取连接状态

tm.getDataState();

//获取网络类型(SDK版本29,才有5G,5G代号NR)

tm.getNetworkType();

//获取临近小区信息

之前的tm.getNeighboringCellInfo();这个方法在SDK29版本里删除掉了,所以得用另一种方法获取。

List<CellInfo> allCellInfo = tm.getAllCellInfo();
//集合返回的第一个数据,allCellInfo.get(0)就是当前小区的数据String ss = allCellInfo.toString();for(CellInfo cellInfo : allCellInfo){if(cellInfo instanceof CellInfoGsm) {CellInfoGsm infoGsm = (CellInfoGsm) cellInfo;CellIdentityGsm cellIdentity = infoGsm.getCellIdentity();int cid = cellIdentity.getCid();int lac = cellIdentity.getLac();int psc = cellIdentity.getPsc();int arfcn = cellIdentity.getArfcn();int rsrp = infoGsm.getCellSignalStrength().getDbm();str = "2G=====cid:"+cid+"=====lac:"+lac+"=====psc:"+psc+"=====arfcn:"+arfcn+"=====rsrp:"+rsrp+"\n";}else if(cellInfo instanceof CellInfoWcdma){CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) cellInfo;int cid = cellInfoWcdma.getCellIdentity().getCid();int lac = cellInfoWcdma.getCellIdentity().getLac();int psc = cellInfoWcdma.getCellIdentity().getPsc();int rsrp = cellInfoWcdma.getCellSignalStrength().getDbm();serverCellInfo.asulevel = cellInfoWcdma.getCellSignalStrength().getAsuLevel();str = "3G=====cid:"+cid+"=====lac:"+lac+"=====psc:"+psc+"=====rsrp:"+rsrp+"\n";}else if(cellInfo instanceof CellInfoLte){CellInfoLte cellInfoLte = (CellInfoLte) cellInfo;int cid = cellInfoLte.getCellIdentity().getCi();int pci = cellInfoLte.getCellIdentity().getPci();int tac = cellInfoLte.getCellIdentity().getTac();int earfcn = cellInfoLte.getCellIdentity().getEarfcn();int rsrp = cellInfoLte.getCellSignalStrength().getRsrp();int rsrq = cellInfoLte.getCellSignalStrength().getRsrq();
//                Object rssi = cellInfoLte.getCellSignalStrength().getRssi();Object rssnr = cellInfoLte.getCellSignalStrength().getRssnr();Object bandwidth = cellInfoLte.getCellIdentity().getBandwidth();str = "4G=====cid:"+cid+"=====pci:"+pci+"=====tac:"+tac+"=====earfcn:"+earfcn+"=====rsrp:"+rsrp+"=====rsrq:"+rsrq+"=====rssnr:"+rssnr+"=====bandWidth:"+bandwidth+"\n";}else if(cellInfo instanceof CellInfoNr){CellInfoNr cellInfoNr = (CellInfoNr) cellInfo;int asuLevel = cellInfoNr.getCellSignalStrength().getAsuLevel();int rsrp = cellInfoNr.getCellSignalStrength().getDbm();int level = cellInfoNr.getCellSignalStrength().getLevel();str = "5G=====asuLevel:"+asuLevel+"=====rsrp:"+rsrp+"=====level:"+level;}}

注:商用手机无法获得5G下的小区信息,可以检测到是NR(5G)网络,但是即使在5G情况下获得的仍是4G锚点小区的信息!!!想要获取需要跟手机厂家去购买获取Root过的手机。

//上面那个方法没法获取rssi,总是报错,获取sinr,cqi,rsrp,rssi等信息

//注册一个监听,利用反射拿到这些数据,在监听后拿数据即可

class MyPhoneStateListener extends PhoneStateListener {@Overridepublic void onSignalStrengthsChanged(SignalStrength signalStrength) {super.onSignalStrengthsChanged(signalStrength);if (phoneGeneralInfo.ratType == TelephonyManager.NETWORK_TYPE_LTE) {try {int rssi = (Integer) signalStrength.getClass().getMethod("getLteSignalStrength").invoke(signalStrength);int rsrp = (Integer) signalStrength.getClass().getMethod("getLteRsrp").invoke(signalStrength);int rsrq = (Integer) signalStrength.getClass().getMethod("getLteRsrq").invoke(signalStrength);int sinr = (Integer) signalStrength.getClass().getMethod("getLteRssnr").invoke(signalStrength);int cqi = (Integer) signalStrength.getClass().getMethod("getLteCqi").invoke(signalStrength);} catch (Exception e) {e.printStackTrace();return;}} else if (phoneGeneralInfo.ratType == TelephonyManager.NETWORK_TYPE_GSM) {try {serverCellInfo.rssi = signalStrength.getGsmSignalStrength();serverCellInfo.rsrp = (Integer) signalStrength.getClass().getMethod("getGsmDbm").invoke(signalStrength);serverCellInfo.asulevel = (Integer) signalStrength.getClass().getMethod("getAsuLevel").invoke(signalStrength);} catch (Exception e) {e.printStackTrace();return;}} else if (phoneGeneralInfo.ratType == TelephonyManager.NETWORK_TYPE_TD_SCDMA) {try {int rssi = (Integer) signalStrength.getClass().getMethod("getTdScdmaLevel").invoke(signalStrength);int rsrp = (Integer) signalStrength.getClass().getMethod("getTdScdmaDbm").invoke(signalStrength);int asulevel = (Integer) signalStrength.getClass().getMethod("getAsuLevel").invoke(signalStrength);} catch (Exception e) {e.printStackTrace();return;}}}
}

//监听使用方法,需要调用一下

MyPhoneStateListener myPhoneStateListener = new MyPhoneStateListener();
tm.listen(myPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

Android TelephonyManager获取LET信息及手机基本信息相关推荐

  1. Android中获取屏幕信息的几种方式

    Android中获取屏幕信息的几种方式 方案一 方案二 方案三 Note:以下方案中的this均指Activity. 方案一 WindowManager wm = (WindowManager) th ...

  2. Android Studio 获取磁盘信息获取imei

    到AndroidManifest.xml文件设置权限: <?xml version="1.0" encoding="utf-8"?> <man ...

  3. 对Android GPS获取位置信息的新研究.

    前段时间略看了Android 的GPS API,就冒然发布了一片博文,现在再回过头来看看,确实有不少不足甚至错误.这篇算做补充和纠正吧. 1.要想获取位置信息,需要在手机设置中将"位置与安全 ...

  4. 【Android Studio安装部署系列】十一、Android studio获取数字签名信息

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 下面介绍下调试版本和发布版本获取数字签名的方法,通过以下方法可以获取到SHA1和MD5. 一般在使用分享功能,在第三方平台中创建应用 ...

  5. android GPS 获取城市信息

    1.取得用户当前位置的经度,纬度. 2.根据经纬度转换成城市名称. 取得用户当前位置的经度,纬度 今天弄了一个多小时,写了一个GPS获取地理位置代码的小例子,包括参考了网上的一些代码,并且对代码进行了 ...

  6. Android专业获取设备信息如:AndroidID、唯一设备ID、制造商、型号、版本号、版本码等

    在开发app中很多时候需要获取设备的基本信息等运用到项目中,就需要一些方法获取,网上资源中方法五花八门,有的还获取不到,令人头大,话不多说,鄙人整理了一套方法,话不多说真机测试如下>上图: 接下 ...

  7. 是否允许应用获取设备信息_手机权限获取弹窗不断,隐私安全如何确保,这些权限需谨慎...

    安卓手机在安装软件的时候,总是会要求获取各种权限,除了一些必要权限外,有时还会索要一些敏感权限,如:电话.联系人等权限.工信部也在去年,展开了一次大规模的整顿,,现在很多软件拒绝了权限,也是可以使用的 ...

  8. android 多媒体文件信息,Android如何获取多媒体文件信息

    首先给大家讲android的多媒体数据库.MediaStore这个类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取.这个MediaStore包括了多媒体数据库的 ...

  9. android华为获取相册,解决华为手机获取相册图片路径为null

    最近代码君遇到一个问题,在其他手机调用系统相册获取图片路径都是可以的,但是华为手机,执行相同代码,会报空指针异常,网上找了很多资料,都没什么实用的效果 Intent intent; intent = ...

  10. ios获取设备信息,手机型号

    获取手机设备信息 let deviceName = UIDevice.currentDevice().name //获取设备名称 例如:梓辰的手机 let sysName = UIDevice.cur ...

最新文章

  1. YTU 1495 蛇行矩阵 YTU 1607 字符棱形YTU 1959 图案打印YTU 2016 打印金字塔
  2. 描述一下普适计算时代中的计算机,《课程总结报告-普适计算及其应用》.doc
  3. 牛客题霸 NC19 子数组的最大累加和问题
  4. 关于PHP数组方法array_walk的疑问
  5. 如何在 SAP 电商云 Spartacus UI 里访问 CMS Component data 数据
  6. ipv4地址是几位二进制数_几张思维导图,让你清楚的知道ip地址怎么回事?
  7. 浅谈美国ESS音频DAC解码芯片ES9023
  8. 全国 259GB 离线天地图地名路网数据覆盖范围
  9. wegame饥荒一直登录中_PC饥荒本地双人(最多三人)
  10. 三年级计算机课标,三年级信息技术教案上册
  11. ppt导出1000dpi的图
  12. 【MATLAB】使用“蒙特卡罗(Monter Carlo)”算法计算不规则图形的面积
  13. 英国几个有名的英语考试总结
  14. 用苹果手机计算机程序二,两台iPhone怎么互传软件 苹果手机互传应用的3个小技巧...
  15. 昨晚罗老师的手机发布了,传闻发布会的门票就卖了
  16. golang 字符串拼接性能比较
  17. 全球人口密度大致分布
  18. 联想ThinkPad笔记本预装win10改为win7
  19. kaggle数据集汇总_Kaggle比赛快速上手演示
  20. 智能机器人未来发展趋势

热门文章

  1. db9串口(db9串口定义及颜色)
  2. 华为笔试题分享:分糖果
  3. STM32 cjson的GBK/UTF-8/UNICODE转换、显示中文、GBK字库
  4. X-Scan介绍和使用方法
  5. 10款滑动门代码_jquery 滑动门_js滑动门_tab滑动门_jquery 选项卡_js选项卡_tab选项卡效果(三)
  6. WIN7 vc2008【fatal error C1083: 无法打开文件:“Windows.h”: No such file or directory】【cl.exe link.exe手动调用编译】
  7. html5趣味智力答题测试,10个趣味智力题及答案
  8. 面试中常见智力题汇总
  9. 金蝶14.0系统服务器安装教程,金蝶kis专业版14.0安装注意事项
  10. ajax菜鸟教程html,菜鸟教程--AJAX