下载源码地址:http://download.youkuaiyun.com/download/wocao1226/10134749
增加ethernet主要是三部分:1、ethernet service; 2、ethernet Settings 3、Systemui ethernet通知
以下提到的源文件将会在文章最后提供下载地址
拷贝frameworks/base/ethernet到frameworks/base下
修改frameworks/base/Android.mk
在
wifi/Java/android/net/wifi/p2p/IWifiP2pManager.aidl \
下加上如下代码
FRAMEWORKS_BASE_SUBDIRS中加上ethernet
拷贝EthernetService.java到frameworks/base/services/java/com/android/server/下
修改frameworks/base/core/java/android/content/Context.java
在
public static final String WIFI_P2P_SERVICE = "wifip2p";
下加上如下内容
修改frameworks/base/core/java/android/app/ContextImpl.java
在
import android.net.wifi.p2p.IWifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager;
下增加如下内容
在
registerService(WIFI_P2P_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(WIFI_P2P_SERVICE);
IWifiP2pManager service = IWifiP2pManager.Stub.asInterface(b);
return new WifiP2pManager(service);
}});
下增加如下内容
增加
注释掉
//import android.net.EthernetDataTracker;
在
try {
tracker = netFactory.createTracker(targetNetworkType, config);
mNetTrackers[targetNetworkType] = tracker;
} catch (IllegalArgumentException e) {
Slog.e(TAG, "Problem creating " + getNetworkTypeName(targetNetworkType)
+ " tracker: " + e);
continue;
}
下加上如下代码
if(mNetConfigs[targetNetworkType].radio == ConnectivityManager.TYPE_ETHERNET) { //add by hclydao
EthernetService ethernet = new EthernetService(context, (EthernetStateTracker)mNetTrackers[targetNetworkType]);
ServiceManager.addService(Context.ETH_SERVICE, ethernet);
mNetTrackers[targetNetworkType].startMonitoring(context, mTrackerHandler);
}
注释掉
//return EthernetDataTracker.getInstance();
增加如下代码
拷贝android_net_ethernet.cpp到frameworks/base/core/jni目录下
修改frameworks/base/core/jni下的Android.mk
在
android_net_wifi_WifiNative.cpp \
下加上如下代码
修改frameworks/base/core/jni/AndroidRuntime.cpp
在
extern int register_android_net_wifi_WifiNative(JNIEnv* env);下
加上
extern int register_android_net_ethernet_EthernetManager(JNIEnv* env);//add by hclydao
在
REG_JNI(register_android_net_wifi_WifiNative),
下加上如下代码
在framework/base/core/java/android/provider/Settings.java中
public static final String WIFI_ON = "wifi_on";
下加上如下代码
Settings部分修改
拷贝eth_configure.xml到Settings/res/layout/
拷贝ic_setttings_ethernet.png到Settings/res/drawable-hdpi与drawable-mdpi
拷贝ethernet_settings.xml到Settings/res/xml下
修改xml下settings_headers.xml在wifi下增加如下内容
修改values/strings.xml增加如下内容
拷贝Settings/src/ethernet到Settings/src文件夹下
修改Settings/AndroidManifest.xml
在
<!-- Wireless Controls -->
<activity android:name="Settings$WirelessSettingsActivity"
android:taskAffinity="com.android.settings"
android:label="@string/wireless_networks_settings_title"
android:parentActivityName="Settings">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.settings.WIRELESS_SETTINGS" />
<action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
<action android:name="android.settings.NFC_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.VOICE_LAUNCH" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.WirelessSettings" />
<meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
android:resource="@id/wireless_settings" />
</activity>
下增加如下代码
在
public static String getWifiIpAddresses(Context context) {
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
LinkProperties prop = cm.getLinkProperties(ConnectivityManager.TYPE_WIFI);
return formatIpAddresses(prop);
}
下增加如下代码
修改Settings/src/Settings.java
加上
在
R.id.wifi_settings,
下加上
在
WifiSettings.class.getName(),
下加上
SystemUI修改
拷贝systemui下所有.png文件到frameworks/base/packages/SystemUI/res/drawable下
修改frameworks/base/packages/SystemUI/res/values/strings.xml
在
<string name="accessibility_no_sim">No SIM.</string>
下增加如下
在
<View
android:layout_height="6dp"
android:layout_width="6dp"
android:visibility="gone"
android:id="@+id/spacer"
/>
<!--<FrameLayout
android:id="@+id/wimax_combo"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginEnd="-6dp"
>
上增加
修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
在
private int mWifiStrengthId = 0;
下增加
在private String mWifiDescription, mMobileDescription, mMobileTypeDescription,mEthernetDescription;
后增加,mEthernetDescription如上
然后增加mEthernetGroup,mEthernet如下
ViewGroup mWifiGroup, mMobileGroup,mEthernetGroup;
ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType, mAirplane,mEthernet;
在
@Override
public void setIsAirplaneMode(boolean is, int airplaneIconId) {
mIsAirplaneMode = is;
mAirplaneIconId = airplaneIconId;
apply();
}
下增加
mAirplane = (ImageView) findViewById(R.id.airplane);
下增加
在mAirplane = null;
下增加
在
if (mIsAirplaneMode) {
mAirplane.setImageResource(mAirplaneIconId);
mAirplane.setVisibility(View.VISIBLE);
} else {
mAirplane.setVisibility(View.GONE);
}
下增加
然后增加 mEthernetVisible 如下
if (mMobileVisible && mWifiVisible && mIsAirplaneMode && mEthernetVisible) {
修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
增加
在
String mContentDescriptionWimax;
下增加
在
//wimax
private boolean mWimaxSupported = false;
private boolean mIsWimaxEnabled = false;
private boolean mWimaxConnected = false;
private boolean mWimaxIdle = false;
private int mWimaxIconId = 0;
private int mWimaxSignal = 0;
private int mWimaxState = 0;
private int mWimaxExtraState = 0;
下增加
在
String mLastCombinedLabel = "";
下增加
在
void setIsAirplaneMode(boolean is, int airplaneIcon);
下增加
在
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
下增加
在
cluster.setIsAirplaneMode(mAirplaneMode, mAirplaneIconId);
上增加如
在
else if (action.equals(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION) ||
action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION) ||
action.equals(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION)) {
updateWimaxState(intent);
refreshViews();
}
下增加
在
updateWimaxIcons函数下增加函数
在
if (mBluetoothTethered) {
combinedLabel = mContext.getString(R.string.bluetooth_tethered);
combinedSignalIconId = mBluetoothTetherIconId;
mContentDescriptionCombinedSignal = mContext.getString(
R.string.accessibility_bluetooth_tether);
}
下增加
在这个下面增加
注释掉之前的
/*
final boolean ethernetConnected = (mConnectedNetworkType == ConnectivityManager.TYPE_ETHERNET);
if (ethernetConnected) {
combinedLabel = context.getString(R.string.ethernet_label);
}
*///modify by hclydao
在&& !ethernetConnected后增加 && !mShowEthIcon
在 || mLastWifiIconId != mWifiIconId
下增加
|| mLastEthernetIconId != mEthernetIconId
在
// the wimax icon on phones
if (mLastWimaxIconId != mWimaxIconId) {
mLastWimaxIconId = mWimaxIconId;
}
下增加
基本上就修改这些地方
先执行下make update-api在编译
碰到的问题
设置静态IP无法启动问题
解决方法
修改frameworks/base/services/java/com/android/server/ConnectivityService.java部分代码为:
以及
============================================
作者:hclydao
http://blog.youkuaiyun.com/
版权没有,但是转载请保留此段声明
============================================
文件为zip文件,上传自动加了_下载后请删除最后的_
===================以下为补充内容==================================
1.将文件DhcpInfoInternal.java放到 \frameworks\base\core\java\android\net\下
2.上文中Settings/res/layout全路径为:packages/apps/Settings/res/layout/
3.上文中values/strings.xml全路径为:packages/apps/Settings/res/values/strings.xml
4.上文中Settings/src全路径为:packages/apps/Settings/src
5.上文中Settings/src/Utils.java全路径为:packages/apps/Settings/src/com/android/Settings/Utils.java
6.上文中Settings/src/Settings.java全路径为:packages/apps/Settings/src/com/android/Settings/Settings.java
7.还需要修改frameworks/base/core/java/android/net/NetworkUtils.java文件,将public static int inetAddressToInt(Inet4Address inetAddr) 改为public static int inetAddressToInt(InetAddress inetAddr),否则会报inetAddressToInt(java.net.Inet4Address) in android.net.NetworkUtils cannot be applied to (java.net.InetAddress)这个错误 .