您的位置:首页 > 其它

默认勾选以太网不能够联网的问题

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: