Android2.3 Ethernet Framework 移植(二)

三、移植packages部分
3.1.复制源路径packages/apps/Settings/src/com/android/settings/ethernet目录到目标路径packages/apps/Settings/src/com/android/settings/目录下;

3.2.复制源路径packages/apps/Settings/src/com/android/settings/EthernetSettings.java到目标路径packages/apps/Settings/src/com/android/settings/目录下;

3.3.复制源路径packages/apps/Settings/res/drawable-hdpi/ic_settings_ethernet.png到目标路径packages/apps/Settings/res/drawable-hdpi/目录下

3.4.复制源路径packages/apps/Settings/res/drawable-mdpi/ic_settings_ethernet.png到目标路径packages/apps/Settings/res/drawable-mdpi/目录下

3.5.复制源路径packages/apps/Settings/res/layout/eth_configure.xml到目标路径packages/apps/Settings/res/layout/目录下

3.6.复制源路径packages/apps/Settings/res/xml/ethernet_settings.xml到目标路径packages/apps/Settings/res/xml/目录下

3.7. 修改目标路径文件packages/apps/Settings/res/values/strings.xml
<string name="sound_category_feedback_title">Feedback</string>
+<!-- Ethernet configuration dialog -->  
+<string name="eth_config_title">Configure Ethernet device</string>  
+<string name="eth_setting">Ethernet setting</string>  
+<string name="eth_dev_list">Ethernet Devices:</string>  
+<string name="eth_con_type">Connection Type</string>  
+<string name="eth_con_type_dhcp">DHCP</string>  
+<string name="eth_con_type_manual">Static IP</string>  
+<string name="eth_dns">DNS address</string>  
+<string name="eth_gw">Default Gateway</string>  
+<string name="eth_ipaddr">IP address</string>  
+<string name="eth_quick_toggle_title">Ethernet</string>  
+<string name="eth_quick_toggle_summary">Turn on Ethernet</string>  
+<string name="eth_radio_ctrl_title">Ethernet configuration</string>  
+<string name="eth_conf_perf_title">Ethernet configuration</string>  
+<string name="eth_conf_summary">Configure Ethernet devices</string>  
+<string name="eth_mask">Netmask</string>  
+<string name="eth_toggle_summary_off">Turn off Ethernet</string>  
+<string name="eth_toggle_summary_on">Turn on Ethernet</string>  

3.8.修改目标路径文件packages/apps/Settings/res/ values-zh-rCN-nokeys/strings.xml
<string name="applications_settings_summary" msgid="6616938758022986257">"管理应用程序"</string>
+    <!-- Ethernet configuration dialog -->  
+    <string name="eth_config_title">"设置以太网设备"</string>  
+    <string name="eth_setting">"以太网设置"</string>  
+    <string name="eth_dev_list">"以太网设置:"</string>  
+    <string name="eth_con_type">"连接类型"</string>  
+    <string name="eth_con_type_dhcp">"Dhcp动态分配IP"</string>  
+    <string name="eth_con_type_manual">"静态分配IP"</string>  
+    <string name="eth_dns">"DNS地址"</string>  
+    <string name="eth_gw">"网关"</string>  
+    <string name="eth_ipaddr">"IP地址"</string>  
+    <string name="eth_quick_toggle_title">"以太网"</string>  
+    <string name="eth_quick_toggle_summary">"打开以太网设备"</string>  
+    <string name="eth_radio_ctrl_title">"以太网设置"</string>  
+    <string name="eth_conf_perf_title">"以太网设置"</string>  
+    <string name="eth_conf_summary">"设置以太网设备"</string>  
+    <string name="eth_mask">"子网掩码"</string>  
+    <string name="eth_toggle_summary_off">"关闭以太网设备"</string>  
+    <string name="eth_toggle_summary_on">"打开以太网设备"</string>

3.9. 修改目标路径文件packages/apps/Settings/res/xml/settings.xml
<com.android.settings.IconPreferenceScreen
    android:title="@string/radio_controls_title"
    settings:icon="@drawable/ic_settings_wireless">
    <intent
    android:action="android.intent.action.MAIN"
    android:targetPackage="com.android.settings"
    android:targetClass="com.android.settings.WirelessSettings" />
</com.android.settings.IconPreferenceScreen>
+<com.android.settings.IconPreferenceScreen
+    android:title="@string/eth_radio_ctrl_title"  
+    settings:icon="@drawable/ic_settings_ethernet">  
+    <intent  
+    android:action="android.intent.action.MAIN"  
+    android:targetPackage="com.android.settings"  
+    android:targetClass="com.android.settings.EthernetSettings" />  
+</com.android.settings.IconPreferenceScreen>

3.10. 修改目标路径文件packages/apps/Settings/AndroidManifest.xml
+<!-- Ethernet controls -->  
+<activity android:name="EthernetSettings"  
+    android:label="@string/eth_radio_ctrl_title"  
+    >  
+    <intent-filter>  
+        <action android:name="android.intent.action.MAIN" />  
+        <action android:name="android.settings.ETHERNET_SETTINGS" />  
+        <category android:name="android.intent.category.DEFAULT" />  
+        <category android:name="android.intent.category.VOICE_LAUNCH" />  
+    </intent-filter>  
+</activity>  
+<activity android:name=".ethernet.EthernetEnabler" android:label="@string/eth_setting"  
+    android:clearTaskOnLaunch="true"  
+    >  
+    <intent-filter>  
+        <action android:name="android.intent.action.MAIN" />  
+        <action android:name="android.settings.ETHERNET_ENABLER_SETTINGS" />  
+        <category android:name="android.intent.category.DEFAULT" />  
+        <category android:name="android.intent.category.VOICE_LAUNCH" />  
+        <category android:name="com.android.settings.SHORTCUT" />  
+    </intent-filter>  
+</activity>  
+<activity android:name=".ethernet.EthernetConfigure" android:label="@string/eth_conf_perf_title"  
+    android:clearTaskOnLaunch="true"  
+    >  
+    <intent-filter>  
+        <action android:name="android.intent.action.MAIN" />  
+        <action android:name="android.settings.ETHERNET_CONFIGURE_SETTINGS" />  
+        <category android:name="android.intent.category.DEFAULT" />  
+        <category android:name="android.intent.category.VOICE_LAUNCH" />  
+        <category android:name="com.android.settings.SHORTCUT" />  
+    </intent-filter>  
+</activity>  
<!-- Wireless Controls -->


四、接下来要增加Ethernet的状态栏图标
4.1.复制源路径frameworks/base/packages/SystemUI/res/drawable-hdpi/connect_creating.png到目标路径对应目录下

4.2.复制源路径frameworks/base/packages/SystemUI/res/drawable-hdpi/connect_established.png到目标路径对应目录下

4.3.复制源路径frameworks/base/packages/SystemUI/res/drawable-hdpi/connect_no.png到目标路径对应目录下

4.4.复制源路径frameworks/base/packages/SystemUI/res/drawable-mdpi/connect_creating.png到目标路径对应目录下

4.5.复制源路径frameworks/base/packages/SystemUI/res/drawable-mdpi/connect_established.png到目标路径对应目录下

4.6.复制源路径frameworks/base/packages/SystemUI/res/drawable-mdpi/connect_no.png到目标路径对应目录下

4.7. 修改目标路径文件frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java
import android.net.wifi.WifiManager;
+import android.net.ethernet.EthernetManager;
+import android.net.ethernet.EthernetStateTracker;
import android.os.Binder;
//-----------------------------------------------------------------------------------------
import android.os.storage.StorageManager;
+import android.os.SystemProperties;
import android.provider.Settings;
//-----------------------------------------------------------------------------------------
private int mLastWifiSignalLevel = -1;
private boolean mIsWifiConnected = false;
// Ethernet
+private static final int[] sEthImages = {
+    R.drawable.connect_established,
+    R.drawable.connect_no,
+    R.drawable.connect_creating
+};
//-----------------------------------------------------------------------------------------
    else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION) ||
        action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION) ||
        action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
            updateWifi(intent);
+    }  else if (action.equals(EthernetManager.ETHERNET_STATE_CHANGED_ACTION)) {
+        updateEth(intent);
    }
    else if (action.equals(LocationManager.GPS_ENABLED_CHANGE_ACTION) ||
        action.equals(LocationManager.GPS_FIX_CHANGE_ACTION)) {
            updateGps(intent);
    }
//-----------------------------------------------------------------------------------------
//如果不要2G/3G信号图标可如此更改,设置图标属性Visibility为false
mService.setIcon("phone_signal", mPhoneSignalIconId, 0);//在所有的这行下添加下面的一行,共4处
+mService.setIconVisibility("phone_signal", false);//此处是添加的
//-----------------------------------------------------------------------------------------
// wifi will get updated by the sticky intents
+// ethernet
+mService.setIcon("ethernet", sEthImages[0], 0);
+mService.setIconVisibility("ethernet", false);
//-----------------------------------------------------------------------------------------
filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
+filter.addAction(EthernetManager.ETHERNET_STATE_CHANGED_ACTION);
filter.addAction(LocationManager.GPS_ENABLED_CHANGE_ACTION);
//-----------------------------------------------------------------------------------------
updateSignalStrength(); // apply any change in mInetCondition
break;
+case ConnectivityManager.TYPE_ETHERNET:
+    if (info.isConnected()) {
+        mService.setIcon("ethernet", sEthImages[0], 0);
+        // Show the icon since ethernet is connected
+        mService.setIconVisibility("ethernet", true);
+    } else {
+        mService.setIcon("ethernet", sEthImages[1], 0);
+        // Hide the icon since we're not connected
+        mService.setIconVisibility("ethernet", false);
+    }
+    break;
case ConnectivityManager.TYPE_WIMAX:
            mInetCondition = inetCondition;
            if (info.isConnected()) {
                mIsWimaxConnected = true;
                mService.setIconVisibility("wimax", true);
            } else {
                mIsWimaxConnected = false;
            }
            updateWiMAX(intent);
            break;
//-----------------------------------------------------------------------------------------
mService.setIconVisibility("bluetooth", mBluetoothEnabled);
    }
+private final void updateEth(Intent intent) {
+    final int event = intent.getIntExtra(EthernetManager.EXTRA_ETHERNET_STATE, EthernetManager.ETHERNET_STATE_UNKNOWN);
+    int iconId;
+    switch (event) {
+            case EthernetStateTracker.EVENT_HW_CONNECTED:
+            case EthernetStateTracker.EVENT_INTERFACE_CONFIGURATION_SUCCEEDED:
+                mService.setIconVisibility("ethernet", true);
+                iconId = sEthImages[0];
+                break;
+            case EthernetStateTracker.EVENT_HW_DISCONNECTED:
+            case EthernetStateTracker.EVENT_INTERFACE_CONFIGURATION_FAILED:
+                mService.setIconVisibility("ethernet", false);
+                iconId = sEthImages[1];
+                return;
+            default:
+                iconId = sEthImages[2];
+    }
+    mService.setIcon("ethernet", iconId, 0);
+}
private final void updateWifi(Intent intent) {

五、修改目标路径文件build/core/pathmap.mk
vpn \
+ethernet \
keystore \

六、修改init.rc, 增加DHCP服务
service dhcpcd /system/bin/dhcpcd -o domain_name_servers -B eth0

     disabled
     oneshot

七、编译

首先执行make update-api

再输入正常编译android指令,例如: ./android

 

八、后记:

上述代码移植后, 生成的image 只支持在Setting 里通过turn on/off ethernet 选项使能Ethernet , 但是不能实时侦测网线插拔,重新做DHCP.

要实现实时侦测网线插拔,重新做DHCP, 需要修改下面代码

修改framework/base/core/jni/android_net_ethernet.cpp

static int netlink_init_interfaces_list(void)
{
... 

char idx[MAX_FGETS_LEN+1];
+free_int_list();
 if ((netdir = opendir(SYSFS_CLASS_NET)) != NULL) {

//-----------------------------------------------------------------------------------------

static jstring android_net_ethernet_waitForEvent(JNIEnv *env, jobject clazz)
{

int len;
+ int ret; 

//-----------------------------------------------------------------------------------------

   if (nh->nlmsg_type == RTM_DELLINK ||
                    nh->nlmsg_type == RTM_NEWLINK ||
                    nh->nlmsg_type == RTM_DELADDR ||
                    nh->nlmsg_type == RTM_NEWADDR) {
                    int type = nh->nlmsg_type;
 +if (type == RTM_NEWLINK)
+{   
+if ((ret = netlink_init_interfaces_list()) < 0) {
+ LOGE("Can not collect the interface list");
+ }
+}
+if (type == RTM_NEWLINK &&((einfo->ifi_flags & IFF_UP)))
+{
+ goto gonext;
+ }
-if (type == RTM_NEWLINK &&
- (!(einfo->ifi_flags & IFF_LOWER_UP))) {
- type = RTM_DELLINK;
- }
                  if ((info = find_info_by_index
                          (((struct ifinfomsg*) NLMSG_DATA(nh))->ifi_index)) != NULL)
                        snprintf(result,left, "%s:%d:",info->name,type);
                   
                    left = left - strlen(result);
                    result =(char *)(result+ strlen(result));
                  
                }

            }
+gonext:       
            LOGV("Done parsing");
            rbuf[4096 - left] = '\0';
            LOGV("poll state :%s, left:%d", rbuf, left);
        }

 

--120917

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值