android2.3修改ethernet默认为不选中状态
来源:互联网 发布:linux jdk1.7下载地址 编辑:程序博客网 时间:2024/06/10 23:24
网上移植ethernet框架的文章很多,这里就不多说了,主要说下如何修改默认状态。如下就简单的说下,我也还没有研究的很清楚。
首先服务的建在:
frameworks/base/services/java/com/android/server/ConnectivityService.java
有如下代码:
EthernetStateTracker est = new EthernetStateTracker(context, mHandler); EthernetService ethService = new EthernetService(context, est); ServiceManager.addService(Context.ETHERNET_SERVICE, ethService); mNetTrackers[ConnectivityManager.TYPE_ETHERNET] = est; est.startMonitoring();
这个应该是最开始执行的时候运行的。也就是说服务建后执行了这个est.startMonitoring();
这个函数在:
frameworks/base/ethernet/java/android/net/ethernet/EthernetStateTracker.java
代码如下:
@Override public void startMonitoring() { if (localLOGV) Slog.v(TAG,"start to monitor the ethernet devices"); if (mServiceStarted) { mEM = (EthernetManager)mContext.getSystemService(Context.ETHERNET_SERVICE); int state = mEM.getState(); if (state != mEM.ETHERNET_STATE_DISABLED) { if (state == mEM.ETHERNET_STATE_UNKNOWN) { // maybe this is the first time we run, so set it to enabled mEm.setEnabled(true); } else { try { resetInterface(); } catch (UnknownHostException e) { Slog.e(TAG, "Wrong ethernet configuration"); } } } } }
其中state=mEm.getState();
调用的是EthernetManager里面的getState这个函数在:
frameworks/base/ethernet/java/android/net/ethernet/EthernetManager.java
代码如下:
/** * Get ethernet service state * @return the state of the ethernet service */ public int getState( ) { try { return mService.getState(); } catch (RemoteException e) { return 0; } }而这里又调用的Service里面的getState函数在:
frameworks/base/services/java/com/android/server/EthernetService.java
代码如下:
/** * Get ethernet service state * @return the state of the ethernet service */ public int getState( ) { return mEthState; }而MethState初始化的值为:
private int mEthState= EthernetManager.ETHERNET_STATE_UNKNOWN;
也就是说系统第一次运行到startMonitoring里会运行mEm.setEnabled(true);代码如下:
EthernetManager.java
/** * Enable or Disable a ethernet service * @param enable {@code true} to enable, {@code false} to disable * @hide */ public void setEnabled(boolean enable) { try { mService.setState(enable ? ETHERNET_STATE_ENABLED:ETHERNET_STATE_DISABLED); } catch (RemoteException e) { Slog.i(TAG,"Can not set new state"); } }而这里又会调用到service里面的setState代码如下:这里会传入enable给setState
EthernetService.java
private synchronized void persistEnabled(boolean enabled) { final ContentResolver cr = mContext.getContentResolver(); Settings.Secure.putInt(cr, Settings.Secure.ETHERNET_ON, enabled ? EthernetManager.ETHERNET_STATE_ENABLED : EthernetManager.ETHERNET_STATE_DISABLED); } /** * Enable or Disable a ethernet service * @param enable {@code true} to enable, {@code false} to disable */ public synchronized void setState(int state) { if (mEthState != state) { mEthState = state; if (state == EthernetManager.ETHERNET_STATE_DISABLED) { persistEnabled(false); mTracker.stopInterface(false); } else { persistEnabled(true); if (!isConfigured()) { // If user did not configure any interfaces yet, pick the first one // and enable it. setMode(EthernetDevInfo.ETHERNET_CONN_MODE_DHCP); } try { mTracker.resetInterface(); } catch (UnknownHostException e) { Slog.e(TAG, "Wrong ethernet configuration"); } } } }此时会传给内部内EthernetManager.ETHERNET_STATE_ENABLED状态。
而在设置ethernet的里面会从内部内取出他的状态,即此时为enable状态,这里是第一次也就是默认的。所以把
EthernetStateTracker.java里面的startMonitoring修改为:
@Override public void startMonitoring() { if (localLOGV) Slog.v(TAG,"start to monitor the ethernet devices"); if (mServiceStarted) { mEM = (EthernetManager)mContext.getSystemService(Context.ETHERNET_SERVICE); int state = mEM.getState(); if (state != mEM.ETHERNET_STATE_DISABLED) { if (state == mEM.ETHERNET_STATE_UNKNOWN) { // maybe this is the first time we run, so set it to enabled mEM.setEnabled(false);//modi hclydao //mEm.setEnabled(true); } else { try { resetInterface(); } catch (UnknownHostException e) { Slog.e(TAG, "Wrong ethernet configuration"); } } } } }编译运行,成功。同时这不影响你设置的ethernet的状态。
至于后面的设置ethernet的流程这里就不分析了,因为我也是一知半解。前面如果有什么错误的地方希望大家指出。
- android2.3修改ethernet默认为不选中状态
- Android2.3 修改默认时区
- iOS 默认某个cell为选中状态
- RadioGroup里设置RadioButton为初始的都不选中状态及设置默认选中出现的问题及解决方法
- 保持 checkbox 选中状态不被修改
- Android2.3 Ethernet Framework 移植(二)
- Android2.3 Ethernet Framework 移植(一)
- 修改默认确定按钮选中状态和回车响应
- 设置struts的html:radio默认为选中状态
- struts的html:radio之一默认为选中状态
- 如何使@Html.CheckBoxFor默认为选中状态
- radio 默认选中, 第二次点击选中的按钮 改变为不选中,并获取值
- wpf treeview实现item为不选中状态
- _tableView 默认全部选中状态
- bootstrap-table复选框默认选中。(从数据库获取到对应的状态进行判断是否为选中状态)
- 自定义Spinner--可以默认不选中,修改默认显示的spinner
- android Spinner默认不选中
- android Spinner默认不选中
- Android打印代码调用栈
- 数据库出现ORA-01033问题 解决方法
- 开发自己的Maven插件之四:基本概念
- Objective-C中的一些特殊的数据类型
- Amazon Flow更新 支持QR条码及增强现实购物功能
- android2.3修改ethernet默认为不选中状态
- webservice(JAX-WS)的配置
- freetype交叉编译及测试程序
- API Append .txt
- android 学习线路
- HDU 1789
- Android APK发布准备工作
- string、wstring、cstring、 char、 tchar、int、dword转换方法
- Ubuntu 下解压tar.xz方法