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

相关文章

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络

配置InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 网络 服务器端配置 在服务器端,你需要确保安装了必要的驱动程序和软件包,并且正确配置了网络接口。 安装 OFED 首先,安装 Open Fabrics Enterprise Distribution (OFED),它包含了 InfiniBand 所需的驱动程序和库。 sudo

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Tomcat性能参数设置

转自:http://blog.csdn.net/chinadeng/article/details/6591542 Tomcat性能参数设置 2010 - 12 - 27 Tomcat性能参数设置 博客分类: Java Linux Tomcat 网络应用 多线程 Socket 默认参数不适合生产环境使用,因此需要修改一些参数   1、修改启动时内存参数、并指定J

InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE)

在超算网络环境中,InfiniBand (IB) 和 RDMA over Converged Ethernet (RoCE) 是两种重要的网络技术,它们旨在提供高性能、低延迟的数据传输能力,适用于大规模并行计算任务。下面是对这两个技术的具体名词解释和应用场景的详细说明。 InfiniBand (IB) 名词解释 InfiniBand (IB):InfiniBand 是一种高性能计算和企业数据

linux下非标准波特率的设置和使用

通常,在linux下面,设置串口使用终端IO的相关函数设置,如tcsetattr等函数,linux内部有一个对常用波特率列表的索引,根据设置的波特率用底层驱动来设置异步通信芯片的寄存器 对于非标准的任意波特率需要用ioctl(fd, TIOCGSERIAL, p)和ioctl(fd, TIOCSSERIAL, p)的配合,ioctl的最后一个参数是struct serial_struct *

linux下查看自己的外网ip

局域网的服务器是通过ADSL路由器连接外网的,但ADSL是从ISP运营商那儿通过动态获得IP的,那么我怎么知道自己的外网地址是多少呢? 今天得到几个办法: curl -s http://whatismyip.org wget http://whatismyip.org 然后再  cat index.html 也可以看到