默认勾选以太网不能够联网的问题
2016-06-25 16:17
489 查看
转自:http://www.hehuigg.com/?p=168
最近做一个带以太网口的android项目,要求系统默认勾选以太网。发现,烧录软件以后,连网线以太网居然没有分配地址连接网络,但是手动在设置里面关闭以太网再打开又是可以的。
分析发现原来连网线的时候frameworks/base/ethernet/java/android/net/ethernet/EthernetDataTracker.java里面的isConfigured()返回false。至于为啥为false,没有找到原因,后面在这个文件里面做了一下修改,手动去配置以太网口,算是一个解决方案吧。下面是修改的patch:
--- a/frameworks/base/ethernet/java/android/net/ethernet/EthernetDataTracker.java
+++ b/frameworks/base/ethernet/java/android/net/ethernet/EthernetDataTracker.java
@@ -56,6 +56,10 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.List;
import java.util.ArrayList;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
/**
* This class tracks the data connection associated with Ethernet
* This is a singleton class and an instance will be created by
@@ -297,6 +301,39 @@ public class EthernetDataTracker implements NetworkStateTracker {
return linkAddress;
}
+ public static String loadFileAsString(String filePath) throws java.io.IOException{
+ StringBuffer fileData = new StringBuffer(1000);
+ BufferedReader reader = new BufferedReader(new FileReader(filePath));
+ char[] buf = new char[1024]; int numRead=0;
+ while((numRead=reader.read(buf)) != -1){
+ String readData = String.valueOf(buf, 0, numRead);
+ fileData.append(readData);
+ }
+ reader.close();
+ return fileData.toString();
+ }/** Get the STB MacAddress*/
+
+ public static String getMacAddress(){
+ try {
+ return loadFileAsString("/sys/class/net/eth0/address") .toUpperCase().substring(0, 17);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+ public void myReconfigure(EthernetManager mEthManager, String mIface){
+
+ mEthManager.setEnabled(false);
+ Log.e("EthernetDataTracker","=========myconfigure=========");
+
+ EthernetDevInfo newInfo = new EthernetDevInfo();
+ newInfo.setHwaddr(getMacAddress());
+
+ newInfo.setIfName(mIface);
+ mEthManager.updateDevInfo(newInfo);
+ mEthManager.setEnabled(true);
+ }
+
public void ConnectNetwork(boolean up) {
if(DBG) Slog.d(TAG, "ConnectNetwork: Up is " + up + ", mLinkUp is " + mLinkUp +
", On is " + mEthManage.isOn() + ", mIface " + mIface);
@@ -304,6 +341,9 @@ public class EthernetDataTracker implements NetworkStateTracker {
if(!mEthManage.isConfigured()) {
if(mIface != null)
Log.d(TAG, "no configuration for " + mIface);
+ if(up && mLinkUp && mEthManage.isOn()){
+ myReconfigure(mEthManage, mIface);
+ }
return;
}
最近做一个带以太网口的android项目,要求系统默认勾选以太网。发现,烧录软件以后,连网线以太网居然没有分配地址连接网络,但是手动在设置里面关闭以太网再打开又是可以的。
分析发现原来连网线的时候frameworks/base/ethernet/java/android/net/ethernet/EthernetDataTracker.java里面的isConfigured()返回false。至于为啥为false,没有找到原因,后面在这个文件里面做了一下修改,手动去配置以太网口,算是一个解决方案吧。下面是修改的patch:
--- a/frameworks/base/ethernet/java/android/net/ethernet/EthernetDataTracker.java
+++ b/frameworks/base/ethernet/java/android/net/ethernet/EthernetDataTracker.java
@@ -56,6 +56,10 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.List;
import java.util.ArrayList;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
/**
* This class tracks the data connection associated with Ethernet
* This is a singleton class and an instance will be created by
@@ -297,6 +301,39 @@ public class EthernetDataTracker implements NetworkStateTracker {
return linkAddress;
}
+ public static String loadFileAsString(String filePath) throws java.io.IOException{
+ StringBuffer fileData = new StringBuffer(1000);
+ BufferedReader reader = new BufferedReader(new FileReader(filePath));
+ char[] buf = new char[1024]; int numRead=0;
+ while((numRead=reader.read(buf)) != -1){
+ String readData = String.valueOf(buf, 0, numRead);
+ fileData.append(readData);
+ }
+ reader.close();
+ return fileData.toString();
+ }/** Get the STB MacAddress*/
+
+ public static String getMacAddress(){
+ try {
+ return loadFileAsString("/sys/class/net/eth0/address") .toUpperCase().substring(0, 17);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+ public void myReconfigure(EthernetManager mEthManager, String mIface){
+
+ mEthManager.setEnabled(false);
+ Log.e("EthernetDataTracker","=========myconfigure=========");
+
+ EthernetDevInfo newInfo = new EthernetDevInfo();
+ newInfo.setHwaddr(getMacAddress());
+
+ newInfo.setIfName(mIface);
+ mEthManager.updateDevInfo(newInfo);
+ mEthManager.setEnabled(true);
+ }
+
public void ConnectNetwork(boolean up) {
if(DBG) Slog.d(TAG, "ConnectNetwork: Up is " + up + ", mLinkUp is " + mLinkUp +
", On is " + mEthManage.isOn() + ", mIface " + mIface);
@@ -304,6 +341,9 @@ public class EthernetDataTracker implements NetworkStateTracker {
if(!mEthManage.isConfigured()) {
if(mIface != null)
Log.d(TAG, "no configuration for " + mIface);
+ if(up && mLinkUp && mEthManage.isOn()){
+ myReconfigure(mEthManage, mIface);
+ }
return;
}
相关文章推荐
- 剑指offer-面试6:重建二叉树(二叉树前中后序遍历)
- 递归和归纳
- 【English】In June ,Meet My 365
- Servlet学习第一天--Servlet开发映射URL配置
- 启用WebApi 2里的Api描述信息(Help下的Description)
- cannot resolve method getSupportFragmentManager()错误
- 初学CentOS——基本ACL命令
- ReactJS学习系列课程(React 动画使用)
- Container With Most Water
- 代码中的常见的问题总结
- 设计模式之装饰器模式
- 管理内容摘录
- linux下给Qt安装QWT插件
- 1Roman to Integer 2 Integer to Roman 3 Integer to English Words转化问题
- hibernate组件作为复合主键
- Django 之管理界面
- 面向对象的设计原则第二篇:我无懈可击,我是英雄!颤抖吧妖魔们
- DELPHI版传奇引擎学习菜鸟篇(applem2)-01
- HDU 2089 不要62(数位DP)
- 求1+2+3+...+n