[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. 使用 Bluemix™ Live Sync 高速更新 Bluemix 上执行的应用程序实例

    假设您要构建 Node.js 应用程序,那么能够使用 IBM® Bluemix® Live Sync 高速更新 Bluemix 上的应用程序实例,并像在桌面上进行操作一样进行开发,而无需又一次部署.执 ...

  2. Day3晚笔记

    DEV C++扩展栈空间 -Wl,--stack=64000000000 带权二分图匹配 建一个超级源点S,超级汇点T 把左边的点的点权作为权值,连一条S到左边的点的边 把右边的点的点权作为权值,连一 ...

  3. dropdown下拉菜单

    <!--声明方式的下拉菜单:三个要点--> <!--1 外围容器用dropdown包裹--> <!--2 内部点击事件data-toggle--> <!--3 ...

  4. 【Codeforces Round #455 (Div. 2) C】 Python Indentation

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 一个for循环之后. 下一个写代码的地方一是从(x+1,y+1)开始的 然后如果写完了一个simple statement 下次就有 ...

  5. CORS原理

    http://blog.csdn.net/renfufei/article/details/51675148 https://html.spec.whatwg.org/multipage/infras ...

  6. CSU1660: K-Cycle

    Description A simple cycle is a closed simple path, with no other repeated vertices or edges other t ...

  7. 本地 oracle 安装文件夹满触发 ORA-7445 [_memmove()+64] 导致Instance Crashed 的事故

    近期处理了一个问题,原因是因为命中ORA-600 [kole_t2u], [34] - description, bugs 导致 在udump 文件夹下大量转储 出cdmp 文件, 然后这些 cdmp ...

  8. 二叉树的递归插入【Java实现】

    C++中由于有指针的存在,可以让二叉树节点指针的指针作为插入函数的实参,在函数体内通过*操作实现对真实节点指针.节点左孩子指针.节点右孩子指针的改变,这样很容易使用递归将大树问题转化到小树问题.但在J ...

  9. JAVA 水题

    纯粹是让我来掌握熟练度的. 1.金蝉素数 某古寺的一块石碑上依稀刻有一些神秘的自然数. 专家研究发现:这些数是由1,3,5,7,9 这5 个奇数字排列组成的5 位素数,且同时去掉它的最高位与最低位数字 ...

  10. Java web开发了解

    1.什么是Java web项目? F.A.Q: 服务器 服务器,也称伺服器,是提供计算服务的设备.由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力.服务器的构 ...