网上移植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的流程这里就不分析了,因为我也是一知半解。前面如果有什么错误的地方希望大家指出。






更多相关文章

  1. android开发实例06:popwindow实现下拉菜单
  2. Android基础教程之-----访Iphone 拖动相片特效Gallery的简单应用
  3. Android(安卓)Studio快捷键(3) 代码提示
  4. Android(安卓)apk 二次打包植入广告
  5. 获得两点间的GPS距离
  6. android仿IOS7的两种对话框
  7. Android(安卓)Studio最常用快捷键
  8. android 双击返回键退出应用核心代码
  9. Android(安卓)Framework层Power键关机流程(一,Power长按键操作处理

随机推荐

  1. 一个NB的程序员应该掌握哪些中间件~
  2. Spring Cloud 2.x之整合工作流Activiti
  3. 翻译:《实用的Python编程》01_Introductio
  4. 今天是个好日子,不知不觉公众号运营一年了
  5. 如何甄别哪些是过期的技术?哪些是流行的技
  6. IT大企业有哪些病,别被这些病毁了自己?
  7. 2018匆匆而过,期待2019活的人模狗样
  8. 凛冬至,外包咋了,努力照样250!
  9. 抢票加速靠谱?还是黄牛更靠谱?
  10. 国内网游版号重开审批;腾讯、网易等游戏股