Android 4.4 Kitkat 使能有线网络 Ethernet
来源:互联网 发布:淘宝分销代理好做吗 编辑:程序博客网 时间:2024/06/05 08:48
http://www.2cto.com/kf/201405/303293.html
背景
Android kitkat 默认已经支持 Ethernet 有线网络,只要稍微配置,便可以直接使用,测试结果,网络浏览器和下载都没有没有问题,而且系统可以做到与 wifi 共存,互相不影响功能,这里简单介绍如何使能 Ethernet,并简要分析其代码和流程。Linux 配置部分
Linux 需要能够支持有线网络,生成 eth 网络设备节点。
Android 配置
overlay
主要是 overlay 里面添加 Ethernet 网络类型支持: frameworks/base/core/res/res/values/config.xml
"1,1" "7,1" "9,1"
其中 9 对应 Ethernet 的网络类型,其定义在 ConnectivityManager.java 中
/** * The Ethernet data connection. When active, all data traffic * will use this network type's interface by default * (it has a default route). */ public static final int TYPE_ETHERNET = 9;
init..rc
init 里面需要添加 dhcp 和 ip renew 服务
# DHCPCD# # eth0service dhcpcd_eth0 /system/bin/dhcpcd -ABKL class main disabled oneshot# IP Renew# # eth0service iprenew_eth0 /system/bin/dhcpcd -n class main disabled oneshot
流程分析
ConnectivityService
ConnectivityService 的构造函数里面将会读取 radioAttributes 里面的网络配置public ConnectivityService(Context context, INetworkManagementService netManager, INetworkStatsService statsService, INetworkPolicyManager policyManager, NetworkFactory netFactory) { if (DBG) log("ConnectivityService starting up");
// Load device network attributes from resources String[] raStrings = context.getResources().getStringArray( com.android.internal.R.array.radioAttributes); for (String raString : raStrings) { RadioAttributes r = new RadioAttributes(raString); if (VDBG) log("raString=" + raString + " r=" + r); if (r.mType > ConnectivityManager.MAX_RADIO_TYPE) { loge("Error in radioAttributes - ignoring attempt to define type " + r.mType); continue; } if (mRadioAttributes[r.mType] != null) { loge("Error in radioAttributes - ignoring attempt to redefine type " + r.mType); continue; } mRadioAttributes[r.mType] = r; }
根据网络配置数据,将会创建 EthernetDataTracker , 并开始监听 startMonitoring
// Create and start trackers for hard-coded networks for (int targetNetworkType : mPriorityList) { final NetworkConfig config = mNetConfigs[targetNetworkType]; final NetworkStateTracker tracker; try { tracker = netFactory.createTracker(targetNetworkType, config); mNetTrackers[targetNetworkType] = tracker; } catch (IllegalArgumentException e) { Slog.e(TAG, "Problem creating " + getNetworkTypeName(targetNetworkType) + " tracker: " + e); continue; } tracker.startMonitoring(context, mTrackerHandler); if (config.isDefault()) { tracker.reconnect(); } }
EthernetDataTracker
EthernetDataTracker 将会寻找第一个以 eth 开头的有线网络设备,打开并开始做 dhcpeth\\d
sIfaceMatch = context.getResources().getString( com.android.internal.R.string.config_ethernet_iface_regex); try { final String[] ifaces = mNMService.listInterfaces(); for (String iface : ifaces) { if (iface.matches(sIfaceMatch)) { mNMService.setInterfaceUp(iface); InterfaceConfiguration config = mNMService.getInterfaceConfig(iface); if (getEthernetCarrierState(iface) == 1) { mIface = iface; mLinkUp = true; mNetworkInfo.setIsAvailable(true); if (config != null && mHwAddr == null) { mHwAddr = config.getHardwareAddress(); if (mHwAddr != null) { mNetworkInfo.setExtraInfo(mHwAddr); } } } // if a DHCP client had previously been started for this interface, then stop it NetworkUtils.stopDhcp(iface); } } reconnect(); } catch (RemoteException e) { Log.e(TAG, "Could not get list of interfaces " + e); }
DHCP 成功后,通知NetworkManagementService 网路已经连接,这个时候上层应用便可以开始执行网络操作。
mNetworkInfo.setDetailedState(DetailedState.CONNECTED, null, mHwAddr); Message msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED, mNetworkInfo); msg.sendToTarget();
如果有多个网口呢,这个 EthernetDataTracker 显然不能满足要求,必须对其进行扩展。
0 0
- Android 4.4 Kitkat 使能有线网络 Ethernet
- Android 4.4 Kitkat 使能有线网络 Ethernet
- Android 4.4 Kitkat 使能有线网络 Ethernet
- Android 4.4 Kitkat 使能有线网络 Ethernet
- Android 4.4 Kitkat 使能有线网络 Ethernet
- Android 4.4 Kitkat 使能有线网络 Ethernet
- Android 4.4 Kitkat 使能 USB adb 功能
- Android 4.4 Kitkat 使能 USB adb 功能
- Ubuntu有线网络不能用的问题解决办法(Atheros AR8152 V Fast Ethernet Network)
- Android 4.4 KitKat 更新内容
- Android 4.4 KitKat 新特性
- Android KitKat 4.4 ART模式
- Android 4.4 KitKat新特性
- Android TV开发中有线网络模块
- Android KitKat 4.4 Wifi移植之AP模式与网络共享功能调试记录
- android ethernet
- android ethernet
- Android 4.4 KitKat--Dalvik 2.0 (ART)
- TOJ 1455.Ultra-QuickSort(分治经典题目)
- PHP登陆Session验证
- 【奔跑的FPGA】part two ip核仿真遇到的问题以及解决办法
- Apache:使用mod_wsgi时自动reload代码
- 回文树——BZOJ 2160: 拉拉队排练
- Android 4.4 Kitkat 使能有线网络 Ethernet
- 7月第三周——任务
- 非线性分类器---非线性转换解决非线性分类问题
- PAT-B 1018.锤子剪刀布
- Ceph高级工具介绍之ceph-kvstore-tool的使用
- 一起来点React Native
- Java之Socket上的Read操作阻塞问题
- 泛型限行上限和下限
- JavaWeb---制作验证码