android 信号响应,Android手机信号提取

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进行修正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值