Android信号相关

最近项目需要收集手机的信号,网上也没找到比较靠谱的文章,自己做个小结吧。

首先,国内现在共存多种手机制式:

        中国移动                             中国联通                       中国电信

2G    GSM                                   GSM                             CDMA1X

3G    TD-SCDMA                         WCDMA                       CDMA3G

4G    LTE-TDD/LTE-FDD             LTE-TDD/LTE-FDD      LTE-TDD/LTE-FDD

从制式上来看,主要不同在于2G和3G上,所以API的调用也会不同,通过查阅官方文档,下面列出主要的API

通过 Context.getSystemService(Context.TELEPHONY_SERVICE) 可以获取到 TelephonyManager类,这个类顾名思义是对信号进行管理的类,这个类中有个方法 getAllCellInfo(),就可以获取到当前手机所有信号的合集。这里需要特别注意的是,由于官方API的缺陷,如果当前手机是GSM制式的手机(也就是国内的移动和联通),那么getAllCellInfo()就会返回一个null,这个就没办法了,亲测CDMA手机没问题。

需要注意的是,这个方法要在API>17的版本才能使用,所以使用之前需要对版本进行判断。

获取到集合后就可以对集合中的信号类进行判断了,其中包含了CellInfoGsm,CellInfoCdma,CellInfoWcdma,CellInfoLte四个大类。

下面看看每个类中的方法

CellInfoGsm,我们需要关注两个方法 getCellIdentity() 和 getCellSignalStrength()。getCellIdentity()是获取手机当前所在基站相关信息的类,包括LAC,CID等,这个搞通信的人应该都懂。而 getCellSignalStrength()是获取手机信号强度相关的类,包括dbm,RSRP等。

CellInfoCdma,CellInfoWcdma,CellInfoLte和CellInfoGsm一样可以获取到这两个方法,只是名字不同罢了,具体就不赘述,根据自己的需要获取就好。

上面说到getAllCellInfo()在GSM手机上会返回null,所以不能用这个方法,解决办法就是在早期的官方文档中提供了另外的类,GsmCellLocation和CdmaCellLocation,同样可以获取到相关的信息,但是对于3G和4G目前看来就只能使用getAllCellInfo()了,不知道后面官方会不会对bug进行修正。

更多相关文章

  1. 揭秘Context(上下文)
  2. android获取手机号
  3. Android(安卓)- 如何获取状态栏以及标题栏高度?
  4. Ubuntu下使用Android实体机调试前需要修改的设置
  5. Android程序的构建块
  6. android Path 和 PathMeasure 进阶
  7. android service总结
  8. Android程序分析工具Traceview的使用方法
  9. android面试总结加强再加强版

随机推荐

  1. Android(安卓)贝塞尔曲线 折线图
  2. Android安卓知识点
  3. Android 根文件系统启动过程
  4. Android视频开发浅析
  5. 全屏显示Dialog的设置
  6. 利用ant对android项目进行测试,为集成测试
  7. 使用DDMS测试安卓手机APP的性能(android)
  8. Android中人脸识别技术
  9. android的多屏支持
  10. Android - TextView限制文本长度,英文占1