android 5.1 WIFI图标上的感叹号及其解决办法

转自: http://blog.csdn.net/w6980112/article/details/45843129

  第一次调试android5.1的 WIFI更改小功能

Wifi 源码的相关路径目录 
packages/apps/Settings/src/com/Android/settings/wifi/ 
frameworks/base/wifi/java/android/net/wifi/ 
frameworks/base/services/core/java/com/android/server/connectivity 
frameworks/opt/net/wifi/service/java/com/android/server/wifi/ 
frameworks/base/core/

定位一方面根据屏幕的显示信息,另一方面看logcat捕捉的信息,从中会找到有用的。Logcat会告诉你一些蛛丝马迹。还有就是相关代码分布目录。会用百度谷歌搜索信息,android5.1 wifi、 
wifi_no_internet、No Internet Access Detected, won\’t automatically reconnect……………

1、Framework层加打印信息首先声明头文件import android.util.Log;以及TAG是否有。 
在加打印信息时,注意上下位置,例如不能在return XX 下面,以及注意变量的名称会变化,对象会变。numNoInternetAccessRepor或者XXX.umNoInternetAccessReports 
只能重编吗? 
2、packages/apps/Settings/res/ 下是屏幕显示的字符串信息资源, 
No Internet Access Detected, won\’t automatically reconnect. 可以在 
packages/apps/Settings/src 下搜索Wifi_no_internet 字符串。在哪里打印的出 summary.append(context.getString(R.string.wifi_no_internet)); 
else if (mConfig != null && mConfig.hasNoInternetAccess()) 
再跟踪mConfig.hasNoInternetAccess() 函数, 
public boolean hasNoInternetAccess() { 
Return numNoInternetAccessReports > 0 && !validatedInternetAccess; 

再跟踪numNoInternetAccessReports,在这点,分了多个方向,需要分析语法,最有可能走那一块。 
执行命令 grep numNoInternetAccessReports -rn ./frameworks/ 
目标在路径如下所示:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java +7648 
需要研究这个函数public boolean processMessage(Message message) {} 
查找这个函数 networkStatus()的调用之处。 
在frameworks/base/core/java/android/net/NetworkAgent.java +194 case CMD_REPORT_NETWORK_STATUS: { 
if (VDBG) { 
log(“CMD_REPORT_NETWORK_STATUS(” + 
(msg.arg1 == VALID_NETWORK ? “VALID)” : “INVALID)”)); 

networkStatus(msg.arg1); 
接着跟踪MD_REPORT_NETWORK_STATUS 在 
frameworks/base/services/core/java/com/android/server/ConnectivityService.java +1988 
接着跟踪 case NetworkMonitor.EVENT_NETWORK_TESTED在 
frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java +360 
查找这个类private class OfflineState extends State 
private final State mOfflineState = new OfflineState()

再查找mOfflineState在 
frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java +487 
研究transitionTo(mOfflineState) 这个函数 
根本原因是由于isCaptivePortal()这个函数,定义之处路径在 
frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java +635 
查阅资料是去尝试访问android的一个网址,根据http返回来的值来判断网络是否连接通,其中返回为204时为正常,但由于国内屏蔽了这个网址,故在中国这个功能不适用,所以wifi信号有叹号这个标志。

解决办法是if (!mIsCaptivePortalCheckEnabled) return 204 让这句成立,跟踪代码 调用之处在 
mIsCaptivePortalCheckEnabled = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 1) == 1; 
跟踪Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED 
路径在 
android-5.1-m200-mr1/frameworks/base/core/java/android/provider/Settings.java +6175 
根据提示说明把上面的宏改成0即可关掉这个功能。我们遵循不改动android源码的原则,不直接改动, 
在/frameworks/base/packages/SettingsProvider/res/values/defaults.xml 中添加这样一句话 
1

在frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +2648 
添加loadIntegerSetting(stmt, Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, R.integer.def_captive_portal_detection_enabled); 
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 这个文件是用来生成setting.db的。

frameworks/base/packages/SettingsProvider/res/values/defaults.xml 
一般把setting.db中各个表的出厂默认初始值放在这个文件中,在DatabaseHelper.java 中读取。

接着在自己厂商的设备配置文件中添加device/ingenic/dorado/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

在这里面可以重新给宏初始化为0这个值,在编译时先编译android源码,之后再编译到这边,这样可以把之前的给覆盖掉,以后在看代码时能清楚地之道android默认配置是打开的为1。 
0

时间: 2024-10-28 06:25:20

android 5.1 WIFI图标上的感叹号及其解决办法的相关文章

wm命令使用方法及LCD显示图标大小不正常时解决办法

注:Android 4.3引入的wm工具 wm命令及用法: 系统说明: usage: wm [subcommand] [options] wm size [reset|WxH] wm density [reset|DENSITY] wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM] wm size: return or override display size. wm density: override display density. wm overscan:

Android开发常见的Activity中内存泄漏及解决办法

上一篇文章楼主提到由Context引发的内存泄漏,在这一篇文章里,我们来谈谈Android开发中常见的Activity内存泄漏及解决办法.本文将会以"为什么""怎么解决"的方式来介绍这几种内存泄漏. 在开篇之前,先来了解一下什么是内存泄漏. 什么是内存泄漏? 内存泄漏是当程序不再使用到的内存时,释放内存失败而产生了无用的内存消耗.内存泄漏并不是指物理上的内存消失,这里的内存泄漏是值由程序分配的内存但是由于程序逻辑错误而导致程序失去了对该内存的控制,使得内存浪费. 怎

用adb pull命令从android系统中读取文件失败的原因及解决办法

问题:使用adb pull命令从android系统中读取文件失败.显示:Permission denied 原因:是由于文件权限原因引起. 使用ls -l命令查看android系统中的文件权限为: -rw-rw---- app_51   app_51 也就是说,该文件只有app_51用户以及app_51群组拥有读写权限,而adb shell的用户为shell,既不是app_51用户,也不在app_51群组中,所以没有权限读取这个文件.所以就出现了 Permission denied. 解决方法:

android listview 异步加载图片并防止错位 解决办法

网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertView 但没有异步操作也不会有问题. 我简单分析一下: 当重用 convertView 时,最初一屏显示 7 条记录, getView 被调用 7 次,创建了 7 个 convertView. 当 Item1 划出屏幕, Item8 进入屏幕时,这时没有为 Item8 创建新的 view 实例, Ite

win7系统安装VS2013后,连不上远程sqlserver数据库解决办法

刚搬了地方,顺便把电脑重做了系统,把sql2012和vs2013装好,怎么弄也连不上远程的数据库了,用程序连IIS直接死掉,用ssms连也是直接失去响应,开始以为是网线端口被运营商封杀了,最后发现不是的,是程序的原因.解决办法和大家分享一下,供大家参考: 以管理员的身份运行“命令管理器”,输入:netsh winsock reset 然后重启一下电脑. 本人亲测,问题解决了.参考资料URL:http://social.msdn.microsoft.com/Forums/zh-CN/030f66b

阿里云vps上mysql挂掉的解决办法

阿里云vps上mysql挂掉的解决办法 4条回复 用阿里云的vps用作blog服务器,系统很稳定,已经100多天一直运行正常,大概从上个月开始发现blog的mysql会有时挂掉,会收到短信通知.之前没太追究,重新启动了mysql解决的.今天上午又收到短信,已经第三次了. 查了一下日志,三次基本都是一样的: 130728 6:50:14 [Note] Plugin 'FEDERATED' is disabled. 130728 6:50:14 InnoDB: The InnoDB memory h

Failed to fetch URl https://dl-ssl.google.com/android/repository/addo Android SDK更新以及ADT更新出现问题的解决办法

Failed to fetch URl https://dl-ssl.google.com/android/repository/addo Android SDK更新以及ADT更新出现问题的解决办法

部分 CM11 系统 Android 平板运行植物大战僵尸 2 黑屏的解决办法

原文 http://forum.xda-developers.com/showthread.php?t=2755197 部分 CM11 系统的 Android 平板(例如三星 GT-P5110 )运行植物大战僵尸 2 时黑屏,解决方法如下: 安装 NOMone Resolution Changer 使用上述软件(需要 ROOT 权限)将分辨率调整到 1280 * 768 (适用于 1280 * 800 分辨率的平板),保持 DPI 不变 运行植物大战僵尸 2 部分 CM11 系统 Android

关于svn图标不显示问题的解决办法

其实很简单,使用对应版本的svn安装包修复一下即可关于svn图标不显示问题的解决办法