[DESCRIPTION]
状态栏显示的wifi信号强度与wifisetting列表不一致(不同步)
[ANALYSIS]
1、apk都是接收RSSI_CHANGED intent,并调用WifiManager.calculateSignalLevel()方法计算信号个数

2、WifiSettings界面和状态栏的调用点各自是AccessPoints.java和NetworkController(Gemini).java,能够看到两个地方所传给WifiManager.calculateSignalLevel()的level值不同。一个是4一个是5。所以计算下来有可能格数不一致
3、当处于WifiSettings列表界面时,会6s钟刷新一次信号。定义在WifiSettings.WIFI_RESCAN_INTERVAL_MS

4、状态条刷新的时间是3s,定义在wifiStatemachine.java中(POLL_RSSI_INTERVAL_MSECS),若信号变化会丢RSSI_CHANGE出来

 
[SOLUTION]
1、把两边的level都改成5级(注意数组不要越界)

2、在wifiSettings接受RSSI_CHANGED消息。之后调用updateAccesspoint把界面和状态条同步更新
3、须要注意的是,假定两边的rssi值一个是-69、一个是-66。送给WifiManager.calculateSignalLevel()的计算值会有差别:

31 × 4 / 45 = 124 / 45 = 2.xxx

34 × 4 / 45 = 136 / 45 = 3.xxx
这样的情况下能够按rssi范围返回level值。降低浮点数转int带来的误差,比方:
if(rssi 在-55和-65之间)返回4

if(rssi 在-65和-75之间)返回xxx





【MODIFY:】

依照MTK给的方案进行了改动。另外还加了一些字符串数组的改动:

--------------- apps/Settings/res/drawable/wifi_signal_lock.xml ---------------
index 2ad6d91..f7953d2 100644
@@ -15,9 +15,12 @@
--> <level-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:maxLevel="0"
android:drawable="@drawable/ic_wifi_lock_signal_1" />
- <item android:maxLevel="1"
android:drawable="@drawable/ic_wifi_lock_signal_2" />
- <item android:maxLevel="2"
android:drawable="@drawable/ic_wifi_lock_signal_3" />
- <item android:maxLevel="3"
android:drawable="@drawable/ic_wifi_lock_signal_4" />
+ <!-- modify by BW_APP_zengdakui for bug(39969) .start-->
+ <item android:maxLevel="0"
android:drawable="@drawable/ic_wifi_lock_signal_0" />
+ <item android:maxLevel="1"
android:drawable="@drawable/ic_wifi_lock_signal_1" />
+ <item android:maxLevel="2"
android:drawable="@drawable/ic_wifi_lock_signal_2" />
+ <item android:maxLevel="3"
android:drawable="@drawable/ic_wifi_lock_signal_3" />
+ <item android:maxLevel="4"
android:drawable="@drawable/ic_wifi_lock_signal_4" />
+ <!-- modify by BW_APP_zengdakui for bug(39969) .end -->
</level-list> --------------- apps/Settings/res/drawable/wifi_signal_open.xml ---------------
index b506dd3..44dfb9b 100644
@@ -15,9 +15,12 @@
--> <level-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1"
/>
- <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2"
/>
- <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3"
/>
- <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4"
/>
+ <!-- modify by BW_APP_zengdakui for bug(39969) .start -->
+ <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_0"
/>
+ <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_1"
/>
+ <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_2"
/>
+ <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_3"
/>
+ <item android:maxLevel="4" android:drawable="@drawable/ic_wifi_signal_4"
/>
+ <!-- modify by BW_APP_zengdakui for bug(39969) .end -->
</level-list> ------------------ apps/Settings/res/values-zh-rCN/arrays.xml
------------------
index 4f92ef6..19e6bb8 100644
@@ -122,12 +122,16 @@
<item msgid="477015974247590543">"1 小时"</item>
<item msgid="5198271470953124739">"永不超时"</item>
</string-array>
+
+ <!-- modify by BW_APP_zengdakui for bug(39969) .start -->
<string-array name="wifi_signal">
+ <item msgid="2245412278046491293">"极弱"</item>
<item msgid="2245412278046491293">"弱"</item>
<item msgid="5615082285463430971">"一般"</item>
<item msgid="3565079809875324621">"较强"</item>
<item msgid="5702329417707689835">"强"</item>
</string-array>
+ <!-- modify by BW_APP_zengdakui for bug(39969) .end -->
<string-array name="wifi_sleep_policy_entries">
<item msgid="3269131034472904310">"始终"</item>
<item msgid="844721238536786870">"仅限充电时"</item> --------------------- apps/Settings/res/values/arrays.xml ---------------------
index bf83879..c0a5f08 100644
@@ -358,12 +358,15 @@ <!-- Match this with drawable.wifi_signal. --> <skip />
<!-- Wi-Fi settings. The signal strength a Wi-Fi network has. -->
+<!--modify by BW_APP_zengdakui for bug(39969) .start -->
<string-array name="wifi_signal">
+ <item>Poorest</item>
<item>Poor</item>
<item>Fair</item>
<item>Good</item>
<item>Excellent</item>
</string-array>
+<!--modify by BW_APP_zengdakui for bug(39969) .end --> <!-- Wi-Fi settings. Presented as a list dialog to the user to choose the
Wi-Fi sleep policy. -->
<string-array name="wifi_sleep_policy_entries"> --------- apps/Settings/src/com/android/settings/wifi/AccessPoint.java
---------
index d30be9d..5ca64b0 100644
@@ -371,13 +371,16 @@ class AccessPoint extends Preference {
if (mRssi == Integer.MAX_VALUE) {
return -1;
}
+
+ //modify by BW_APP_zengdakui for bug(39969) .start
/**[Add/Comment] by BW_APP [wangyao] for [39862 wifi signal cts
failed.] --start*/
if (SystemProperties.getBoolean("ro.bw.show_huawei_wifi", false)) {
- return WifiManager.calculateSignalLevelCustom(mRssi, 4);
+ return WifiManager.calculateSignalLevelCustom(mRssi, 5);
} else {
- return WifiManager.calculateSignalLevel(mRssi, 4);
+ return WifiManager.calculateSignalLevel(mRssi, 5);
}
/**[Add/Comment] by BW_APP [wangyao] for [39862 wifi signal cts
failed.] --end*/
+ //modify by BW_APP_zengdakui for bug(39969) .end
} WifiConfiguration getConfig() { -------- apps/Settings/src/com/android/settings/wifi/WifiSettings.java --------
index c668a1c..2813aed 100644
@@ -1111,6 +1111,9 @@ public class WifiSettings extends
SettingsPreferenceFragment
}
} else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {
updateConnectionState(null);
+ //modify by BW_APP_zengdakui for bug(39969) .start
+ updateAccessPoints();
+ //modify by BW_APP_zengdakui for bug(39969) .end
} else if (WifiManager.NO_CERTIFICATION_ACTION.equals(action)) {
/// M: show error message @{
String apSSID = ""; ------- apps/Settings/src/com/android/settings/wifi/p2p/WifiP2pPeer.java
-------
index d05c9a3..eb169ee 100644
@@ -39,8 +39,9 @@ public class WifiP2pPeer extends Preference { private int mRssi;
private ImageView mSignal;
-
- private static final int SIGNAL_LEVELS = 4;
+//modify by BW_APP_zengdakui for bug(39969) .start
+ private static final int SIGNAL_LEVELS = 5;
+//modify by BW_APP_zengdakui for bug(39969) .end public WifiP2pPeer(Context context, WifiP2pDevice dev) {
super(context);

WIFI 状态栏显示的wifi信号强度与wifisetting列表不一致的更多相关文章

  1. 树莓派3 之 启动显示和wifi相关参数设置

    最近将树莓派操作系统重新安装了,然后发现了一些问题.这里分享出来给大家 问题一:连接外置显示器黑屏 解决方法:将SD卡 插入电脑,在电脑中找到SD卡 修改其中的config.txt文件 #强制使用HD ...

  2. 家中WIFI被人用WiFi万能钥匙共享后,我们应该怎么做?

    据之前WiFi万能钥匙官方称,其用户总数已经超过了8亿,且日活用户达到2亿,在海量APP中仅次于微信和QQ.可以想象有着数量如此庞大的用户,家里的WiFi是如何的"不保险". 而据 ...

  3. 电脑变WIFI:建立虚拟共享WIFI热点可查看WIFI密码windows中使用bat批处理命令提示符cmd创建教程含工具

    台式机也可支持移动热点,Win10却提示"我们无法设置移动热点",今天我们就另辟蹊径来调教它. ​​建立和开启虚拟WIFI共享网络 Windows 7操作系统及以后支持承载网络,可 ...

  4. ionic项目中手机状态栏显示使用$cordovaStatusbar插件

    在项目中发现Android和iOS在手机状态栏样式不一样,然后就查到有一个cordova插件可以解决这个问题 1.下载插件$cordovaStatusbar命令: cordova plugin add ...

  5. 正则表达式匹配/data/misc/wifi/wpa_supplicant.conf的WiFi名称与密码

    正则表达式匹配/data/misc/wifi/wpa_supplicant.conf的WiFi名称与密码: String regex_name="ssid=\"(.*?)\&quo ...

  6. MFC中状态栏显示鼠标坐标位置

    原文:MFC中状态栏显示鼠标坐标位置,蝈蝈 1,利用MFC向导创建一个应用工程ewq. 2,打开ResourceView,右击Menu菜单,插入Menu,在空白处双击,Caption中填入Point. ...

  7. 在MFC[转载]在MFC状态栏显示时间 状态栏显示时间

    原文:在MFC状态栏显示时间,谢小哈皮儿 c/c++ vc 在mfc状态栏显示时间,在VC的控件中有个Status bar可以在窗体状态栏中添加日期和时间.其实通过简单的代码,你就能创建一个有时钟显示 ...

  8. 安卓4.2原生rom状态栏显示运营商

    前言:要调整状态栏布局,需反编译systemui.apk.单卡机修改status_bar.xml和signal_cluster_view.xml,双卡机修改gemini_status_bar.xml和 ...

  9. Qt Creator实现状态栏显示

    在程序主窗口Mainwindow中,有菜单栏,工具栏,中心部件和状态栏.前面几个已经讲过了,这次讲解状态栏的使用. 程序中有哪些不明白的类或函数,请自己查看帮助. 1.我们在mainwindow.h中 ...

随机推荐

  1. webservie授权调用

    Dim usercode As String = System.Configuration.ConfigurationSettings.AppSettings("SAPWebServiceU ...

  2. 洛谷 P1032 字符变换

    洛谷 P1032 字符变换 题目描述 已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则): A1​ -> B1​ A2​ -> B2​ 规则的含义为:在 A 中的子串 A1​ ...

  3. opera mini 7.5安卓改服版

    opera mini 7.5安卓改服版Opera mini 7.5安卓版前两天发布了,试着进行改服实现***,过程跟以前的OPM7.0差不多,大家可参照我之前的博客教程Opera mini7.0改服教 ...

  4. Android判断App是否在前台运行

    版权声明:本文为博主原创文章,未经博主允许不得转载. //当前应用是否处于前台 private boolean isForeground(Context context) { if (context ...

  5. 原生js大总结三

    021.定义函数的几种方式   1.关键字函数:function fnName(){};   2.字面量函数:var fn = function(){};   3.构造函数:var fn = new ...

  6. 洛谷 P2790 ccj与zrz之积木问题

    P2790 ccj与zrz之积木问题 题目背景 ccj和zrz无聊到了玩起了搭积木...(本题选自uva101,翻译来自<算法竞赛入门经典2>) 题目描述 从左到右有n个木块,编号从0到n ...

  7. Excel 下拉菜单制作

    废话少说吧,以图明示: 图1 操作步骤(环境为Office 2013) 备注,第四步,可以选择页面中的数据源,也可以以“,”分割的方式输入字符串 图2 制作效果

  8. Fragment事务管理源代码分析

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/53132952 本文出自: [HansChen的博客] 概述 在Fragment使用中 ...

  9. 【部分原创】python实现视频内的face swap(换脸)

    1.准备工作,按博主的环境为准 Python 3.5 Opencv 3 Tensorflow 1.3.1 Keras 2 cudnn和CUDA,如果你的GPU足够厉害并且支持的话,可以选择安装 那就先 ...

  10. iOS_06_基本运算符

    一.算术运算 c语言一共有34种运算符,包括了常见的加减乘除 1.加法运算+ # 除了能做加法运算,还能表示正号:+5.+90 2.减法运算- # 除了能做减法运算,还能表示符号:-10.-200 3 ...