转自: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

 
 
root模式可以手动更改,命令如下:
adb shell settings put global captive_portal_detection_enabled 0
 
相关资源位置:
static final int[][] WIFI_SIGNAL_STRENGTH = {
{ R.drawable.stat_sys_wifi_signal_0,
R.drawable.stat_sys_wifi_signal_1,
R.drawable.stat_sys_wifi_signal_2,
R.drawable.stat_sys_wifi_signal_3,
R.drawable.stat_sys_wifi_signal_4 },
{ R.drawable.stat_sys_wifi_signal_0_fully,
R.drawable.stat_sys_wifi_signal_1_fully,
R.drawable.stat_sys_wifi_signal_2_fully,
R.drawable.stat_sys_wifi_signal_3_fully,
R.drawable.stat_sys_wifi_signal_4_fully }
};
R.drawable.stat_sys_wifi_signal_0带感叹号
R.drawable.stat_sys_wifi_signal_0_fully不带感叹号
 
 

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

  1. Android为TV端助力 eclipse出现感叹号的解决办法

    当eclipse导入项目出现红叉但无提示错误时,去看:1>菜单路径----Window/Show View/Console2>菜单路径----Window/Show View/Error ...

  2. 关于 Android 5.0 原生系统网络图标上的感叹号问题解决方法

    解决方案 adb shell settings put global captive_portal_server g.cn 参考 关于 android 5.0 网络图标上的感叹号及其解决办法

  3. 正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法

    正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法 例如:一个android程序包含两个Activity,分别为MainActivity和Other ...

  4. Android Studio安装后提示No JVM installation found解决办法

    Android Studio安装后提示No JVM installation found解决办法 问题描述:Android Studio安装完毕,打开时出现提示"No JVM install ...

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

    上一篇文章楼主提到由Context引发的内存泄漏,在这一篇文章里,我们来谈谈Android开发中常见的Activity内存泄漏及解决办法.本文将会以“为什么”“怎么解决”的方式来介绍这几种内存泄漏. ...

  6. Chrome不能在网易网盘中上传文件的解决办法

    Chrome不能在网易网盘中上传文件的解决办法1. 安装 Adobe Flash Player PPAPI,设置flash插件 chrome://settings/content/flash,许可[* ...

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

    阿里云vps上mysql挂掉的解决办法 4条回复 用阿里云的vps用作blog服务器,系统很稳定,已经100多天一直运行正常,大概从上个月开始发现blog的mysql会有时挂掉,会收到短信通知.之前没 ...

  8. Android开发教程 - 使用Data Binding Android Studio不能正常生成相关类/方法的解决办法

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  9. android studio 一直卡在Gradle:Build Running的解决办法

    转:android studio 一直卡在Gradle:Build Running的解决办法   在使用AS开发安卓应用程序的时候经常会遇到Gradle build running一直在运行甚至卡死的 ...

随机推荐

  1. OpenCV成长之路(5):图像直方图的应用

    正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射. 我们以人脸检测举例,在人脸检测中,我们第一步往往需要 ...

  2. 2016年11月3日--Window.document对象

    五.相关元素操作: var a = document.getElementById("id");找到a: var b = a.nextSibling,找a的下一个同辈元素,注意包含 ...

  3. python自动化之装饰器

    1 高阶函数 满足下列条件之一就可成函数为高阶函数 某一函数当做参数传入另一个函数中 函数的返回值包含n个函数,n>0 高阶函数示范 def bar(): print 'in the bar' ...

  4. GIT文件的三种状态

    对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged).已提交表示该文件已经被安全地保存在本地数据库 中了:已修改表示修改了某 ...

  5. SX学SX内容 笔记?

    某帖子笔记1 主要还是从三体吧某精品贴里看来的... 集合论 集合就是一堆东西...满足 1) 集合中的元素互异(即每种只有一个) 2) 集合中的元素无序(不是一个数组,集合中的元素没有显然的排序法则 ...

  6. MySQL 中根据A表的ID查询B表数据

    例1:查询某个文章及其对应的评论(单个详情) ) FROM A; 例2:查询分类表中,每种分类各包含多少商品(汇总) SELECT category_id, (SELECT count(goods_i ...

  7. 泛型约束 where T : class,new()

    假如有这样一个方法签名 public List<T> GetSomethingList<T> (int a,int b,string c) where T:class,new( ...

  8. .net MVC借助Iframe实现无刷新上传文件

    html: <div id="uploadwindow" style="display: none;"> <form action=" ...

  9. AngularJS之Provider, Value, Constant, Service, Factory, Decorator的区别与详解

    本文转载自http://camnpr.com/javascript/1693.html 首先,provider, value, constant, service, factory他们都是provid ...

  10. C语言也能干大事1

    今天看了个视频,叫C语言也能干大事,写了第一个WIN项目的代码,感觉特别好,就像以前刚刚学会写C语言一样, 然后就恶搞出一个东西,最后的结果就是这个东西退出不了了