最近在在5.1移植了以太网过来,移植的过程并没有什么大问题,修改了框架上的代以及添加了Settings代码,以太网调试就基本完工了,后面只是修改下布局即可。但是网络切换策略就有所变化了,就不得不重新认识5.1的网络切换策略了。
在android4.4上,想实现以太网为优先级最高(意思是以太网打开了,WIFI就无法打开),方法很简单,只需要在default.xml和ConnectivityServicet修改就好了。但在5.1系统上就做了新的调整,具体改动的原因不明,他是依靠网络评分的大小来确定谁的优先级高,废话不多说,以以太网为例子,进行追踪。
1、frameworks\opt\net\ethernet\java\com\android\server\ethernet\EthernetServiceImpl
public EthernetServiceImpl(Context context) {
mContext = context;
Log.i(TAG, "Creating EthernetConfigStore");
mEthernetConfigStore = new EthernetConfigStore();
mIpConfiguration = mEthernetConfigStore.readIpAndProxyConfigurations();
Log.i(TAG, "Read stored IP configuration: " + mIpConfiguration);
mTracker = new EthernetNetworkFactory(mListeners); //创建本地的网络工厂
mTracker.setContext(context); //add by peng
}
2、frameworks\opt\net\ethernet\java\com\android\server\ethernet\EthernetNetworkFactory
EthernetNetworkFactory(RemoteCallbackList<IEthernetServiceListener> listeners) {
mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_ETHERNET, 0, NETWORK_TYPE, "");
mLinkProperties = new LinkProperties();
initNetworkCapabilities(); //初始化网络参数,比如,上下行速度、传输类型等
mListeners = listeners;
}
//我们看看这个类的start函数
public synchronized void start(Context context, Handler target) {
// The services we use.
IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
mNMService = INetworkManagementService.Stub.asInterface(b);
mEthernetManager = (EthernetManager) context.getSystemService(Context.ETHERNET_SERVICE); //获取服务
// Interface match regex.
mIfaceMatch = context.getResources().getString(
com