Android 修改 以太网 IP地址

  有些做Android主板的公司 或者 软硬结合的公司 可能会需要 修改 Android主板的 IP,使用Android 主板接入 以太网,  大家都知道  像一些移动设备 是不支持 我们的以太网(有线网络) ,但是  肯定 有特定的需求 使得 我们的Android 主板 要接入 以太网, 那么 这需要 驱动 和 一些 硬件的支持。 为什么用Android 主板?  很简单  现在 Android 主板 使用很广泛 是因为 价格 低廉,又因为 Android 是个开源的系统 。 所以 有源码的情况下 结合硬件 我们能做很多 事情,只有你想不到,没有做不到....好了 不扯了   进入正题  本章内容说的 是  到底 怎么去 修改 Android  DHCP的 ip 网关  子网掩码呢,可以使用  AILD (Android Interface definition language) ,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。

 用到EthernetManager  和 EthernetDevInfo

 先分析下  EthernetDevInfo


  public class EthernetDevInfo implements Parcelable {
private String dev_name;
private String ipaddr;
private String netmask;
private String route;
private String dns;
private String mode;
public static final String ETH_CONN_MODE_DHCP= "dhcp";
public static final String ETH_CONN_MODE_MANUAL = "manual";

public EthernetDevInfo () {
dev_name = null;
ipaddr = null;
dns = null;
route = null;
netmask = null;
mode = ETH_CONN_MODE_DHCP;
}

public static final Creator<EthernetDevInfo> CREATOR =
        new Creator<EthernetDevInfo>() {
            public EthernetDevInfo createFromParcel(Parcel in) {
                EthernetDevInfo info = new EthernetDevInfo();
                info.setIfName(in.readString());
                info.setIpAddress(in.readString());
                info.setNetMask(in.readString());
                info.setRouteAddr(in.readString());
                info.setDnsAddr(in.readString());
                info.setConnectMode(in.readString());
                return info;
            }

            public EthernetDevInfo[] newArray(int size) {
                return new EthernetDevInfo[size];
            }
        };

       ................此处省略 get set方法

  }

     可以看到 EthernetDevInfo  实现 Parcelable 

2.实现Parcelable就是为了进行序列化,那么,为什么要序列化?

1)永久性保存对象,保存对象的字节序列到本地文件中;

2)通过序列化对象在网络中传递对象;

3)通过序列化在进程间传递对象。

 这里用到  第三条

  再看这个 类 EthernetManager  

public class EthernetManager {

private INetworkManagementService mNMService;  //需要调用的服务

        public EthernetManager(Context paramContext) {
this.mContext = paramContext;
this.mNMService = INetworkManagementService.Stub
.asInterface(ServiceManager.getService("network_management"));

...........初始化一些对象 环境

}

public void setInterfaceUp(String paramString) { // 打开 服务
try {
this.mNMService.setInterfaceUp(paramString);
return;
} catch (RemoteException localRemoteException) {
}
}

public void setInterfaceDown(String paramString) { // 关闭 服务
try {
this.mNMService.setInterfaceDown(paramString);
return;
} catch (RemoteException localRemoteException) {
}
}


public void setMode(String paramString) { //设置模式 DHCP 还是 m
try {
this.mContext.getContentResolver();
if (this.DevName != null)
SystemProperties.set("net." + this.DevName[0] + ".mode",paramString);
return;
} finally {
}
}

public void updateDevInfo(EthernetDevInfo paramEthernetDevInfo) { //修改数据 ip dns等等

// EthernetDevInfo  上面 序列化 的类

try {
SystemProperties.set("net.dns1", paramEthernetDevInfo.getDnsAddr());
SystemProperties.set("net." + paramEthernetDevInfo.getIfName()
+ ".dns1", paramEthernetDevInfo.getDnsAddr());
SystemProperties.set("net." + paramEthernetDevInfo.getIfName()
+ ".dns2", "0.0.0.0");
SystemProperties.set("net." + paramEthernetDevInfo.getIfName()
+ ".config", "1");
SystemProperties.set("net." + paramEthernetDevInfo.getIfName()
+ ".mode", paramEthernetDevInfo.getConnectMode());
SystemProperties.set("net." + paramEthernetDevInfo.getIfName()
+ ".ip", paramEthernetDevInfo.getIpAddress());
SystemProperties.set("net." + paramEthernetDevInfo.getIfName()
+ ".gw", paramEthernetDevInfo.getRouteAddr());
return;
} finally {
}
}

}

   

   差不多 就这样 还有一些 方法 没写出来(保密原因),主要 还是给有需要的朋友 提供思路 。

  这个 可能需要 系统权限   将他 烧录的时候 至为系统方法  使其可以获得权限

  

   总结 :  写博客 目前写的不是很多,  也可能有的朋友 不懂 。或者 我的语言组织能力 有限。表达不清楚

   但是 我会努力的。兄弟们的支持 是我最大的动力  










你可能感兴趣的:(android,硬件,以太网,Android主板)