android 4.4 以太网网络共享功能研究和实现

android较新的版本中,已经加入了以太网功能,用户可在设置界面设置以太网的链接方式,如DHCP/静态IP/PPPOE。java

显然,android的实现中默认以太网是做为一个出去的端口(至关于路由器的WAN口),用来分享外部的internet链接。android

可是部分客户要求能实现以太网来分享设备的internet网络(4G/wifi),但愿实现相似于wifi热点或者USB网络共享的功能,我把它定义为以太网网络共享(至关于路由器的lan口)。服务器

实现以太网网络共享功能,分界面部分和framework两块。网络

开发

一、界面部分

网络共享的界面部分代码主要在src/com/android/settings/TetherSettings.java,咱们须要在原有设置界面的wifi热点、USB网络共享等下面,加上咱们的以太网网络共享的checkbox,仔细发现可看到以下代码:
测试

 addPreferencesFromResource(R.xml.tether_prefs);spa


找到tether_prefs.xml,添加checkbox选项便可:xml

 <CheckBoxPreference
        android:key="enable_bluetooth_tethering"
        android:title="@string/bluetooth_tether_checkbox_text"
        android:persistent="false" />

    <CheckBoxPreference
        android:key="enable_ethernet_tethering"
        android:title="@string/ethernet_tether_checkbox_text"
        android:persistent="false" />接口


接下来还须要修改config.xml,添加eth0接口;修改几个strings.xml,比较简单,这里再也不赘述。路由

此外,原有的以太网设置和新加的以太网网络共享只容许打开一个(即要么作wan口,要么作lan口),也须要在界面上控制,是经过调用ConnectivityManager/EthernetManager实现的。
开发

二、framework部分

主要修改了tethering和connectivityManager部分,参考了usb网络共享。


 测试

点击以太网网络共享,pc经过网线接入设备,pc可得到IP且可经过设备的4G模块访问外网。


 bug及解决

一、拔出网线后,以太网网络共享界面的checkbox自动disable。

二、PC切换网络后,经过设备的dhcp服务器拿到IP的时间很长,60秒左右。

三、在设置界面打开wifi热点和以太网共享屡次,几率出现再次点击界面后没有反应。

经过修改相关代码解决。