android4.4 NetworkController 详解
来源:互联网 发布:淘宝dsr在线计算 编辑:程序博客网 时间:2024/05/18 00:41
NetworkController 是一个所有网络信号图标的综合逻辑判断,比如手机,以太网,还有WIFI,蓝牙等信号图标都在能看到,废话不多说;
由于文件过于庞大,在这单独讲以太网是如何实现的。
1、在APP上层里,以太网的EthernetStateTracker类中经过底层上报的信息(如:网络断开;网络连接;发线网卡),然后将上报的信息通过广播的形式发送到NetworkController 里去。
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(EthernetManager.ETHERNET_STATE_CHANGED_ACTION); //以太网广播
public void onReceive(Context context, Intent intent) {
…………
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
NetworkInfo info = (NetworkInfo) intent.getExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (info == null) {
Xlog.d(TAG,"onReceive, ConnectivityManager.CONNECTIVITY_ACTION networkinfo is null.");
return;
}
int type = info.getType();
Xlog.d(TAG,"onReceive, ConnectivityManager.CONNECTIVITY_ACTION network type is " + type);
if (type != ConnectivityManager.TYPE_NONE && type != ConnectivityManager.TYPE_MOBILE
&& type != ConnectivityManager.TYPE_BLUETOOTH && type != ConnectivityManager.TYPE_WIFI
&& type != ConnectivityManager.TYPE_ETHERNET) {
return;
}
}
Xlog.d(TAG,"onReceive intent is = " + intent);
updateConnectivity(intent);
updateOperatorInfo();
refreshViews();
}
else if (action.equals(EthernetManager.ETHERNET_STATE_CHANGED_ACTION) && FeatureOption.ISMART_ETHERNET_SUPPORT) { // add by peng ethernet
Xlog.d(TAG, "onReceive ETHERNET_STATE_CHANGED_ACTION");
updateEth(intent); //这个是ethernet状态广播,下面单独介绍
refreshViews(); //刷新下图标;
}
private final void updateEth(Intent intent) {
if(ETH_TAG)Xlog.e(TAG, "updateEth fun");
final int event = intent.getIntExtra(EthernetManager.EXTRA_ETHERNET_STATE, EthernetManager.ETHERNET_STATE_UNKNOWN);
if(ETH_TAG)Xlog.e(TAG, "updateEth event="+event+"mEthernetConnected"+mEthernetConnected);
switch (event) {
// case EthernetStateTracker.EVENT_HW_CONNECTED:
case EthernetStateTracker.EVENT_INTERFACE_CONFIGURATION_SUCCEEDED:
Xlog.e(TAG, "updateEthEVENT_INTERFACE_CONFIGURATION_SUCCEEDED");
mEthernetConnected = true;
break;
case EthernetStateTracker.EVENT_HW_DISCONNECTED:
case EthernetStateTracker.EVENT_INTERFACE_CONFIGURATION_FAILED:
default:
mEthernetConnected = false;
break;
}
updateEthernetIcons();
}
接下来就制定图标
private void updateEthernetIcons() {
if (mEthernetConnected) {
mEthernetIconId = R.drawable.stat_sys_ethernet_connected;
} else {
//lei add
mEthernetIconId = 0;
}
if(ETH_TAG)Xlog.d(TAG, "updateEthernetIcons_mEthernetIconId =" + mEthernetIconId);
}
最后调用refreshViews方法刷新图标
cluster.setEthernetIndicators(// 这个接口在SignalCluster类中,里面主要是信号图标显示
mEthernetConnected && !mWifiConnected, //由于系统设置了WIFI优先级最高,所以要当WIFI没有连接的时候 才能连接以太网。
mEthernetIconId,
mContentDescriptionEthernet);
}
编辑有点不方便,代码复制过来有些地方注释不了。
- android4.4 NetworkController 详解
- NetworkController的使用
- Android4.4的init进程详解
- Android4.0系统详解
- Android4种布局详解
- Android4种布局详解
- Android4大组件详解
- Android4.0 SDK功能详解
- Android4.0 SDK新功能详解
- Android4.0 SDK新功能详解!
- android4.0 recovery流程详解
- Android4.2 CTS测试详解
- android4.0电源管理详解
- Android4.3 新特性详解
- android4.4源码下载
- Android4.4新特性
- android4.4短信新概念
- android4.4短信新概念
- Swift 全功能的绘图板开发
- centos 7 安装和配置vncserver
- getParameter()和getAttribute()的区别
- 24
- c中结构体的4种定义
- android4.4 NetworkController 详解
- No suitable driver found for jdbc_我的解决方法
- 25
- 使用 U 盘安装 RedHat 6.5 并且布置 j2ee 环境
- 26
- 27
- char *和char[]的初始化
- Java 理论与实践: 正确使用 Volatile 变量
- Git Hub,eclipse pull 出现问题