分享

android系统 连接管理总结

 lifei_szdz 2013-08-17

android系统 连接管理总结

分类: network platform 125人阅读 评论(0) 收藏 举报

连接管理功能包括 wifi ethernet cable bluetooth tethering ap mobile的连接和切换,状态和数据统计,是一个复杂的模块。


在framework层,通常来说主要如下:

       ANDROID 系统网络连接和管理服务由四个系统服务ConnectivityService、NetworkPolicyManagerService、NetworkManagementService、NetworkStatsService共同配合完成网络连接和管理功能,四个服务只有ConnectivityService、NetworkPolicyManagerService两个服务通过NetworkPolicyManager、ConnectivityManager两个客户端对象对应用程序提供对外SDK接口,而NetworkManagementService、NetworkStatsService没有对外提供SDK接口,但设置应用程序可以通过获取系统服务接口使用NetworkManagementService、NetworkStatsService服务.


框架详细介绍:

http://old./index.php?a=index&m=Index&c=show&id=240006&

这里


结合底层服务netd的部分

http://blog.csdn.net/xiaokeweng/article/details/8130218

总结:

netd服务是主要控制pppd,tethering,softap,dns,route控制。它通过netlink与kernel通信。上层是通过socket与framework通信。


ethernet 子系统:

http://blog.csdn.net/martingang/article/details/8170950


wifi子系统:

http://blog.csdn.net/seker_xinjian/article/details/6254609

NOte: 在android4.0上面,Wifimonitor监听wpa的消息然后 WifiStateMachine的接口最后发广播,WifiStateTracker会收到广播然后用connectivityservice的handler发送消息给ConnectivityService

WifiStateMachine.java

1563     private void sendNetworkStateChangeBroadcast(String bssid) {
1564         Intent intent = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
1565         intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
1566                 | Intent.FLAG_RECEIVER_REPLACE_PENDING);
1567         intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, mNetworkInfo);
1568         intent.putExtra(WifiManager.EXTRA_LINK_PROPERTIES, new LinkProperties (mLinkProperties));
1569         if (bssid != null)
1570             intent.putExtra(WifiManager.EXTRA_BSSID, bssid);
1571         if (mNetworkInfo.getState() == NetworkInfo.State.CONNECTED)
1572             intent.putExtra(WifiManager.EXTRA_WIFI_INFO, new WifiInfo(mWifiInfo));
1573         mContext.sendStickyBroadcast(intent);
1574     }


WifiStateMachine.java

224              } else if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
225                 mNetworkInfo = (NetworkInfo) intent.getParcelableExtra(
226                         WifiManager.EXTRA_NETWORK_INFO);
227                 mLinkProperties = intent.getParcelableExtra(
228                         WifiManager.EXTRA_LINK_PROPERTIES);
229                 if (mLinkProperties == null) {
230                     mLinkProperties = new LinkProperties();
231                 }
232                 mLinkCapabilities = intent.getParcelableExtra(
233                         WifiManager.EXTRA_LINK_CAPABILITIES);
234                 if (mLinkCapabilities == null) {
235                     mLinkCapabilities = new LinkCapabilities();
236                 }
237                 // don't want to send redundent state messages
238                 // TODO can this be fixed in WifiStateMachine?
239                 NetworkInfo.State state = mNetworkInfo.getState();
240                 if (mLastState == state) {
241                     return;
242                 } else {
243                     mLastState = state;
244                 }
245                 Message msg = mCsHandler.obtainMessage(EVENT_STATE_CHANGED,
246                         new NetworkInfo(mNetworkInfo));
247                 msg.sendToTarget();


Android流量统计TrafficStats类的使用

TrafficStats.java

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多