在android手机上,通过“设置”-“关于手机”-“状态”-“信号强度”可以查看到手机的信号强度,
显示出如“-87 dBm 13 asu”这样的数据。ASU与dBm之间的关系是:dBm=-113+(2*ASU)。
在你手机屏幕上方显示的信号条永远不会是最好的方法来确定你手机的信号,
无论你用什么手机都一样。Android也是,用很粗的条来展示很强的信号,但这些条仅仅表示最高的信号。
或许你并不熟悉,信号通常是以dBm度量的。dBm是每毫瓦特的电磁波产生的功率。-60dBm的信号接近完美,
-112dBm就很容易掉线,如果你在 -87dBm以上,Android会显示一个4格的满信号。
android界面UI信号显示是通过RIL对通讯模块发送AT命令来实现的,如AT+CSQ,
我们查看一般可以通过 logcat -b radio来获取一些RIL的实时信息,可以通过关键字“CSQ”查找radio.log,
查看手机信号强度。log如:AT< +CSQ: 14,99 这里的14就是ASU值,在4.0源码中有SignalStrength.java类,
其中有ASU值转换为几格信号的方法:
- public int getGsmLevel() {
- int level;
- // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
- // asu = 0 (-113dB or less) is very weak signal, its better to show 0 bars to the user in such cases.
- // asu = 99 is a special case, where the signal strength is unknown.
- int asu = getGsmSignalStrength();
- if (asu <= 2 || asu == 99) {
- level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
- }else if(asu >= 12) {
- level = SIGNAL_STRENGTH_GREAT;
- }else if (asu >= 8) {
- level = SIGNAL_STRENGTH_GOOD;
- }else if (asu >= 5) {
- level = SIGNAL_STRENGTH_MODERATE;
- }else {
- level = SIGNAL_STRENGTH_POOR
- }
-
- if(DBG) {
- log("getGsmLevel=" + level);
- }
-
- return level;
- }
复制代码
|
|