Settings 中以太网设置解读:
if(mEthManager.getEthernetMode().equals(EthernetManager.ETHERNET_CONNECT_MODE_DHCP)){
mDhcpIP.setChecked(true);
mStaticIP.setChecked(false);
showDhcpIP();
}else{
mDhcpIP.setChecked(false);
mStaticIP.setChecked(true);
mDhcpIP.setSummary("");
showStaticIP(); //show IP from DB
}
public void showDhcpIP() {
mLinkPro = mConnectivityManager.getLinkProperties(ConnectivityManager.TYPE_ETHERNET);
在ConnectivityManager中:
public LinkProperties getLinkProperties(int networkType) {
try {//调用IConnectivityManager的getLinkProperties方法
return mService.getLinkProperties(networkType);
} catch (RemoteException e) {
return null;
}
}
mService 是在构造的时候传进来的
public ConnectivityManager(IConnectivityManager service) {
mService = checkNotNull(service, "missing IConnectivityManager");
}
public static final Uri CONTENT_URI =
Uri.parse("content://" + AUTHORITY + "/secure");
public static Uri getUriFor(String name) {
return getUriFor(CONTENT_URI, name);
}
public static Uri getUriFor(Uri uri, String name) {
return Uri.withAppendedPath(uri, name);
}
监听IP,DNS 等URI变化,刷新UI
private void registerObserver() {
this.getContentResolver().registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.ETHERNET_IP), true, dbObserver);
private ContentObserver dbObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
if(DEBUG) Log.d(TAG, "IP Changed beging to handle DB Changed" + selfChange);
//mEthManager.setEthernetEnabled(false);
getIP(false);
//mEthManager.setEthernetEnabled(true);
}
};
这里DhcpInfoInternal 保存dhcp信息
DhcpInfoInternal mDhcpInfoInternal = new DhcpInfoInternal();
mDhcpInfoInternal.getFromDhcpInfo(mEthManager.getSavedEthernetIpInfo());
String IP = mDhcpInfoInternal.ipAddress;
mIPaddress.setTitle(getString(R.string.eth_ipaddr) + m_space + IP);//mIPaddress.setTitle(IP);
怎么拿到服务端暴露的INetworkManagementService 接口:
private INetworkManagementService mNwService;
IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
mNwService = INetworkManagementService.Stub.asInterface(b);