您的位置:首页 > 移动开发 > Android开发

Android手机得到信号强度信息

2015-04-08 16:09 423 查看


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类呢?我贴出我的代码以供参考:
<code class="language-java hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;">TelephonyManager tm =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

PhoneStateListener MyPhoneListener = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> PhoneStateListener() {
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onSignalStrengthsChanged</span>(SignalStrength signalStrength) {
String singalInformation = signalStrength.toString();
}
};
tm.listen(MyPhoneListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

其中在这里面我们得到的singalInformation变量就是一个包含信号信息的字符串,我们再自行解析就能得到我们所需的参数。

总结

这篇文章主要是讲述如何
4000
得到Android手机中和手机信号强度,我们通过查找Android的源代码进而得到了这些信号强度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android
相关文章推荐