Android手机得到信号强度信息
本文档讲述如何使用通过Android系统来得到手机信号强度等信息
- Android手机得到信号强度信息
-
- 背景介绍
- 相关调研
- 查找源码
- 代码实现
- 总结
-
背景介绍
公司的主题业务是对通信基站的研发,我需要研发一款软件来配合基站的测试工作。通过Android手机连接至基站后,采集手机上的各种和信号强度相关的信息,然后进行分析这些数据,通过分析数据完成对基站的测试
相关调研
需要测试的参数主要是:
-RSRP
-RSSI
-RSRQ
-SNR
-Signal Strength
在这里,我对这些参数不做解释,有需求的自行百度。
查找源码
因为市面上的Android 应用很少是做对信号强度的测试,所以我们直接去看Google提供的SDK来去查找如何可以实现我们的需求。
我们在SDK中查找到了SignalStrength这个类,在SignalStrength类中有和信号强度的信息,我将类的详情进行截图:
但是我们仍然没有看到RSSI、RSRP、RSRQ等信息。我又找遍了各个可能和信号强度有关的类,但是就是找不到,所以我去查看了SignalStrength这个类的源代码。通过查找源代码后,我发现了这里面的奥秘。(我最常用查看Android源码的网站是grepcode.com,这个里面的源代码按照Android版本列出,非常不错)
我先放上SignalStrength.java的截图,再解释里面的奥秘。
这是类的参数图:
我们惊奇的发现这里面有我们需要的变量,然后发现去查找相应的get函数,发现
其实在SignalStrength这个类里面,已经有了可以get这些参数的方法,但是不知什么原因Google把他们隐藏了起来。那么我们如何得到这些值呢?
是使用toString()方法:
虽然SignalStrength类并没有为我们提供get信息的接口,但是我们通过toString方法可以得到将这些参解析出来。
代码实现
我们知道了使用SignalStrength类的toString方法可以将我们需要的参数取出来,那么我们如何使用SignalStrength类呢?我贴出我的代码以供参考:
TelephonyManager tm =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener MyPhoneListener = new PhoneStateListener() {
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
String singalInformation = signalStrength.toString();
}
};
tm.listen(MyPhoneListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
其中在这里面我们得到的singalInformation变量就是一个包含信号信息的字符串,我们再自行解析就能得到我们所需的参数。
总结
这篇文章主要是讲述如何得到Android手机中和手机信号强度,我们通过查找Android的源代码进而得到了这些信号强度。