[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. js常用代码示例及解决跨域的几种方法

    1.阻止默认行为 // 原生js document.getElementById('btn').addEventListener('click', function (event) { event = ...

  2. Java Reflection - Getters and Setters

    原文链接:http://tutorials.jenkov.com/java-reflection/getters-setters.html 通过使用 Java 反射,我们能够在程序执行时观察 clas ...

  3. java——简单理解线程

    一·[概念]       一般来说,我们把正在计算机中运行的程序叫做"进程"(process),而不将其称为"程序"(program). 所谓"线程& ...

  4. GridView-属性大全

    这是个网格控件 他的实现也是通过adapter来实现的,感觉跟listview在使用上并没有多大的区别 常见属性如下 1.android:numColumns=”auto_fit” //GridVie ...

  5. Java学习笔记六 常用API对象二

    1.基本数据类型对象包装类:见下图 public class Test { public static void main(String[] args){ Demo(); toStringDemo() ...

  6. 【问题】VUE 同一页面路由参数变化,数据不刷新

    依赖路由的params参数获取写在created生命周期里面,因为相同路由二次甚至多次加载的关系 没有达到监听,退出页面再进入另一个页面并不会运行created组件生命周期,导致数据还是第一次进入的数 ...

  7. BZOJ2733: [HNOI2012]永无乡(线段树合并)

    Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...

  8. OGRE之跳出漫长的编译等待

    当你新建一个OGRE项目时是否发现那漫长的编译等待时间差点儿让你崩溃? 当你改动代码不断进行调试时是否由于那漫长的编译等待而让你烦恼? 假设是,那么请继续往下看,您将受益匪浅. ----------- ...

  9. Linux在应用层读写寄存器的方法

    可以通过操作/dev/mem设备文件,以及mmap函数,将寄存器的地址映射到用户空间,直接在应用层对寄存器进行操作,示例如下: #include <stdio.h> #include &l ...

  10. python文件的操作

    文件的操作,归根结底就只有两种:打开文件.操作文件 一.打开文件:文件句柄 = open('文件路径', '模式') python中打开文件有两种方式,即:open(...) 和  file(...) ...