有些做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 {
}
}
}
差不多 就这样 还有一些 方法 没写出来(保密原因),主要 还是给有需要的朋友 提供思路 。
这个 可能需要 系统权限 将他 烧录的时候 至为系统方法 使其可以获得权限
总结 : 写博客 目前写的不是很多, 也可能有的朋友 不懂 。或者 我的语言组织能力 有限。表达不清楚
但是 我会努力的。兄弟们的支持 是我最大的动力