android5.1 增加ethernet设置(DHCP与Static ip)

2024-02-17 08:32

本文主要是介绍android5.1 增加ethernet设置(DHCP与Static ip),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.07net01.com/program/2016/03/1391773.html

[摘要:android5.0以上的体系自带了ethernet service,默许开机便会启动,默许ip猎取体式格局是静态分派,那里纪录下android5.1增添ethernet设置界里设置ip猎取体式格局及开闭. 起首是界里圆里] 

android5.0以上的系统自带了ethernet service,默认开机就会启动,默认ip获取方式是动态分配,这里记录下android5.1增加ethernet设置界面设置ip获取方式及开关.

首先是界面方面要修改Settings增加ethernet设置界面

修改文件packages/apps/Settings/res/xml/dashboard_categories.xml在蓝牙后面加上如下代码

<!-- ethernet add by hclydao--><dashboard-tileandroid:id="@+id/ethernet_settings"android:icon="@drawable/ic_settings_dock"android:fragment="com.android.settings.ethernet.EthernetSettings"android:title="@string/ethernet_settings" />

其中的EthernetSettings后面进行说明,然后增加string修改文件packages/apps/Settings/res/values/strings.xml

增加如下内容

<!-- Eth settings title add by hclydao--><string name="ethernet_settings">Ethernet</string><!-- Ethernet configuration dialog add by hcldyao--><string name="eth_config_title">Configure Ethernet device</string><string name="eth_setting">Ethernet</string><string name="eth_dev_list">Ethernet Devices:</string><string name="eth_con_type">Connection Type</string><string name="eth_con_type_dhcp">DHCP</string><string name="eth_con_type_manual">Static IP</string><string name="eth_dns">DNS address</string><string name="eth_gw">Gateway address</string><string name="eth_ipaddr">IP address</string><string name="eth_quick_toggle_title">Ethernet</string><string name="eth_quick_toggle_summary">Turn on Ethernet</string><string name="eth_conf_perf_title">Ethernet configuration</string><string name="eth_conf_summary">Configure Ethernet devices</string><string name="eth_mask">Netmask</string><string name="eth_toggle_summary_off">Turn off Ethernet</string><string name="eth_toggle_summary_on">Turn on Ethernet</string><string name="eth_settings_error">Failed to set: Please enter the valid characters 0~255</string><string name="eth_settings_empty">can\'t be empty</string><!-- Label for the <a target=_blank href="http://www.07net01.com/tags-Network-0.html" target="_blank" class="infotextkey" style="box-sizing: border-box; background-color: transparent; color: rgb(66, 139, 202);">Network</a> prefix of the network [CHAR LIMIT=25]--><string name="eth_network_prefix_length">Network prefix length</string>
这是我修改完成后所要加的所有的string

接着修改文件packages/apps/Settings/src/com/android/settings/SettingsActivity.Java增加

import com.android.settings.ethernet.EthernetSettings;//add by hclydao

然后在R.id.bluetooth_settings,后增加

R.id.ethernet_settings,//add by hclydao

在BluetoothSettings.class.getName(),后增加

EthernetSettings.class.getName(),//add by hclydao

接着修改文件packages/apps/Settings/src/com/android/settings/Settings.java

在public static class WirelessSettingsActivity extends SettingsActivity { /* empty */ }后增加

public static class EthernetSettingsActivity extends SettingsActivity { /* empty */ } //add by hclydao

这里面应该是声明与继承关系

接着修改
packages/apps/Settings/AndroidManifest.xml

 <activity android:name="Settings$EthernetSettingsActivity"android:label="@string/ethernet_settings"android:taskAffinity=""><intent-filter><action android:name="android.intent.action.MAIN" /><action android:name="com.android.settings.ETHERNET_SETTINGS" /><action android:name="android.settings.ETHERNET_SETTINGS" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.VOICE_LAUNCH" /><category android:name="com.android.settings.SHORTCUT" /></intent-filter><meta-data android:name="com.android.settings.FRAGMENT_CLASS"android:value=http://www.ithao123.cn/"com.android.settings.ethernet.EthernetSettings" /><meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" android:resource="@id/ethernet_settings" style="box-sizing: border-box;"><meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" android:value="true" style="box-sizing: border-box;"></meta-data></meta-data>

这三个文件按照WIFI的代码改就行了。
然后增加点击进去后的布局文件,增加
packages/apps/Settings/res/xml/ethernet_settings.xml

内容如下

<?xml <a target=_blank href="http://www.07net01.com/tags-version-0.html" target="_blank" class="infotextkey" style="box-sizing: border-box; background-color: transparent; color: rgb(66, 139, 202);">version</a>="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source ProjectLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, <a target=_blank href="http://www.07net01.com/tags-software-0.html" target="_blank" class="infotextkey" style="box-sizing: border-box; background-color: transparent; color: rgb(66, 139, 202);">software</a>distributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
--><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"android:title="@string/ethernet_settings"xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"><Preferenceandroid:title="@string/eth_conf_perf_title"android:summary="@string/eth_conf_summary"android:key="ETHERNET_CONFIG"android:persistent="false" />
</PreferenceScreen>
然后增加了packages/apps/Settings/src/com/android/settings/ethernet/EthernetSettings.java

这是我最终的代码,这里就不贴上来了,下面我会给下载地址
编译后效果应该是这个样子的:

\

点击进去后会有一个Dialog布局,需要增加文件packages/apps/Settings/res/layout/eth_configure.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:padding="8dip"android:orientation="vertical"><LinearLayoutandroid:id="@+id/table"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"></LinearLayout><!-- Connection type --><TextView android:id="@+id/eth_con_type"style="?android:attr/textAppearanceSmall"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="8dip"android:text="@string/eth_con_type" /><RadioGroup android:id="@+id/con_type"android:layout_width="fill_parent"android:layout_height="wrap_content"><RadioButton android:id="@+id/dhcp_radio"style="?android:attr/textAppearanceSmall"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/eth_con_type_dhcp"></RadioButton><RadioButton android:id="@+id/manual_radio"style="?android:attr/textAppearanceSmall"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/eth_con_type_manual"></RadioButton></RadioGroup><!-- IP address --><LinearLayout android:id="@+id/enterprise_wrapper"android:layout_width="fill_parent"android:layout_height="wrap_content"android:padding="0dip"android:orientation="vertical"><TextView android:id="@+id/ipaddr_text"style="?android:attr/textAppearanceSmall"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="8dip"android:text="@string/eth_ipaddr" /><EditText android:id="@+id/ipaddr_edit"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="2dip"android:singleLine="true" />
<!--<TextView android:id="@+id/netmask_text"style="?android:attr/textAppearanceSmall"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="8dip"android:text="@string/eth_mask" /><EditText android:id="@+id/netmask_edit"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="2dip"android:singleLine="true" />
--><TextView android:id="@+id/prefix_text"style="?android:attr/textAppearanceSmall"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="8dip"android:text="@string/eth_network_prefix_length" /><EditText android:id="@+id/prefix_edit"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="2dip"android:singleLine="true" /><TextView android:id="@+id/dns_text"style="?android:attr/textAppearanceSmall"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="8dip"android:text="@string/eth_dns" /><EditText android:id="@+id/eth_dns_edit"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="2dip"android:singleLine="true" /><TextView android:id="@+id/gw_text"style="?android:attr/textAppearanceSmall"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="8dip"android:text="@string/eth_gw" /><EditText android:id="@+id/eth_gw_edit"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="2dip"android:singleLine="true" /></LinearLayout></LinearLayout></ScrollView>

里面包括了dhcp与static ip的选择,以及static ip的设置

然后增加Settings/src/com/android/settings/ethernet/EthernetDialog.java
以及packages/apps/Settings/src/com/android/settings/ethernet/EthernetSettings.java
这些是具体的实现,最后我会给下载地址

最后出来的效果应该是这样的:

\

配制界面

\

增加这些修改和文件后,基本上就可以进行动态设置了。但是设置的关于ethernet的开关是没有作用的,所以这里增加开关的控制
修改文件frameworks/base/core/java/android/provider/Settings.java
在Settings数据库中增加一个ethernet的控制

public static final String ETHERNET_ON = "ethernet_on";//add by hclydao
增加这个以后需要更新api才能编译过,增加这个后在ethernet-service和Settings中ethernet中进行读写操作

修改frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.java文件

在mHandler = new Handler(handlerThread.getLooper());后增加如下代码

int enable = Settings.Global.getInt(mContext.getContentResolver(),Settings.Global.ETHERNET_ON,0);//add by hclydao
if(enable != EthernetManager.ETH_STATE_ENABLED) {Log.i(TAG, "Ethernet is not enable");return;
}

如果没有打开就直接返回,不启动Service后继的操作,然后增加两个接口

	class TstartThread extends Thread {public void run() {Looper.prepare();mTracker.start(mContext, mHandler);mStarted.set(true);Looper.loop();}}public void Trackstart() { //add by hclydaonew TstartThread().start();}public void Trackstop() {Log.i(TAG, "Stop Ethernet service");Thread tstopthread = new Thread(new Runnable() {public void run() {Looper.prepare();mTracker.stop();mStarted.set(false);Looper.loop();}});tstopthread.start();}

同时要修改frameworks/base/core/java/android/net/EthernetManager.java文件增加

    public static final int ETH_STATE_UNKNOWN = 0;public static final int ETH_STATE_DISABLED = 1;public static final int ETH_STATE_ENABLED = 2;public void start() {try {mService.Trackstart();} catch (NullPointerException | RemoteException e) {}}public void stop() {try {mService.Trackstop();} catch (NullPointerException | RemoteException e) {}}


同时修改frameworks/base/core/java/android/net/IEthernetManager.aidl

增加

	void Trackstart();//add by hclydaovoid Trackstop();

提供给设置进行状态控制,这里基本功能就实现了。
跟踪测试时发现静态ip设置的时候有时候不成功,修改文件frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java

增加

private Handler mHandler;
然后在

mContext = context;

后增加

mHandler = target;//add by hclydao

在if (!setStaticIpAddress(config.getStaticIpConfiguration())) {后增加

//if error then stop and restart add by hclydao
if((mContext != null) && (mHandler != null)) {Log.d(TAG, "Setting static ip failed now restart");stop();start(mContext,mHandler);
}

如果设置失败,stop后重新start

然后在if (mNMService.getinterfaceConfig(iface).hasFlag("running")) {前面增加

                        if(!iface.equals("eth0"))//add by hclydao make sure the interface is eth0continue;

这里只设置了一个设备名,为保存是eth0所以加上这句,防止意外.

最后来增加systemui statusbar中的状态提示,这里只增加了两种状态,一种是连接成功,一种是连接不成功,简单点来
修改frameworks/base/packages/SystemUI/res/layout/signal_cluster_view.xml

     <View
         android:id="@+id/wifi_signal_spacer"
         android:layout_width="4dp"
前增加

</FrameLayout><!--add by hclyado for ethernet--><FrameLayoutandroid:id="@+id/ethernet_combo"android:layout_height="wrap_content"android:layout_width="wrap_content"android:layout_marginRight="-6dp"><ImageViewandroid:id="@+id/ethernet_state"android:layout_height="wrap_content"android:layout_width="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:scaleType="center"/></FrameLayout>

修改文件frameworks/base/packages/SystemUI/res/values/strings.xml
增加

    <!-- Content description of the Ethernet connected icon for accessibility (not shown on the screen). [CHAR LIMIT=NONE] add by hclydao--><string name="accessibility_ethernet_connected">Ethernet connected.</string><string name="accessibility_ethernet_disconnected">Ethernet disconnected.</string><string name="accessibility_ethernet_connecting">Ethernet connecting.</string>

修改文件
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java

增加

import android.net.EthernetManager;

在mWifiSignalController.notifyListeners();前面加上

cluster.setEthernetIndicators(false,R.drawable.ethernet_disconnected,R.string.accessibility_ethernet_disconnected);

在pushConnectivityToSignals函数中的
         mWifiSignalController.setInetCondition(
                 mValidatedTransports.get(mWifiSignalController.getTransportType()) ? 1 : 0);

后面增加

//add by hclydaoint length = mSignalClusters.size();int ethicon = R.drawable.ethernet_connecting;int ethacc = R.string.accessibility_ethernet_connecting;if(mValidatedTransports.get(TRANSPORT_ETHERNET)) {ethicon = R.drawable.ethernet_connected;ethacc = R.string.accessibility_ethernet_connected;}for (int i = 0; i < length; i++) {mSignalClusters.get(i).setEthernetIndicators(mEthernetConnected, ethicon,ethacc);}
//end add

void setIsAirplaneMode(boolean is, int airplaneIcon, int contentDescription);

后增加

public void setEthernetIndicators(boolean visible, int stateIcon, int contentDescription);

修改文件frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java

增加

    private boolean mEthernetVisible = false;//add by hclydaoprivate int mEthernetStateId = 0;private int mEthernetDescription;ViewGroup mWifiGroup,mEthernetGroup;//modify by hclydaoImageView mVpn, mWifi, mAirplane, mNoSims,mEthernet;//modify by hclydao

         mWifiAirplaneSpacer =         findViewById(R.id.wifi_airplane_spacer);
         mWifiSignalSpacer =           findViewById(R.id.wifi_signal_spacer);
         mMobileSignalGroup = (LinearLayout) findViewById(R.id.mobile_signal_group);

后增加

        mEthernetGroup  = (ViewGroup) findViewById(R.id.ethernet_combo);//add by hclydaomEthernet       = (ImageView) findViewById(R.id.ethernet_state);

         mWifi           = null;
         mAirplane       = null;

后增加

        mEthernetGroup  = null;//add by hclydaomEthernet	    = null;

增加函数

	//add by hclydao@Overridepublic void setEthernetIndicators(boolean visible, int stateIcon, int contentDescription) {mEthernetVisible = visible;mEthernetStateId = stateIcon;mEthernetDescription = contentDescription;apply();}

在apply函数中
             mWifiSignalSpacer.setVisibility(View.GONE);
         }

后增加

        if (mEthernetVisible && !mWifiVisible) {//add by hclydaomEthernetGroup.setVisibility(View.VISIBLE);mEthernet.setImageResource(mEthernetStateId);mEthernetGroup.setContentDescription(mContext.getString(mEthernetDescription));} else {mEthernetGroup.setVisibility(View.GONE);}

在boolean anythingVisible = mNoSimsVisible || mWifiVisible || mIsAirplaneMode上增加

|| mEthernetVisible

最后效果图如下:

\


\


\


\

============================================
作者:hclydao
http://blog.csdn.net/hclydao
版权没有,但是转载请保留此段声明

============================================

参考 文章 :

http://blog.csdn.net/moyu123456789/article/details/50002099

http://my.oschina.net/hiliusl/blog/174973?fromerr=IPmtDOdk


相关源码下载地址:http://download.csdn.net/detail/hclydao/9472077


这篇关于android5.1 增加ethernet设置(DHCP与Static ip)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717230

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重