A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© shihao 中级黑马   /  2016-1-23 16:52  /  1473 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在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值转换为几格信号的方法:

  1. public int getGsmLevel() {

  2.     int level;

  3.     // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5

  4.     // asu = 0 (-113dB or less) is very weak signal, its better to show 0 bars to the user in such cases.

  5.     // asu = 99 is a special case, where the signal strength is unknown.

  6.     int asu = getGsmSignalStrength();

  7.     if (asu <= 2 || asu == 99) {
  8.                 level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
  9.         }else if(asu >= 12) {
  10.                 level = SIGNAL_STRENGTH_GREAT;
  11.         }else if (asu >= 8) {
  12.                 level = SIGNAL_STRENGTH_GOOD;
  13.         }else if (asu >= 5) {
  14.                 level = SIGNAL_STRENGTH_MODERATE;
  15.         }else {
  16.                 level = SIGNAL_STRENGTH_POOR
  17.         }
  18.                
  19.     if(DBG) {
  20.                 log("getGsmLevel=" + level);
  21.         }
  22.        
  23.     return level;
  24. }
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马