1、网络类型
//获取网络类型
ConnectivityManager connectivity = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
Log.w(Constants.TAG, "couldn't get connectivity manager");
return null;
}
NetworkInfo activeInfo = connectivity.getActiveNetworkInfo();
if (activeInfo == null) {
if (Constants.LOGVV) {
Log.v(Constants.TAG, "network is not available");
}
return null;
}
return activeInfo.getType();
//判断类型networkType = activeInfo.getType()
private int translateNetworkTypeToApiFlag(int networkType) {
switch (networkType) {
case ConnectivityManager.TYPE_MOBILE:
DebugUtil.debugInfo("DownloadThread translateNetworkTypeToApiFlag: network type = TYPE_MOBILE");
return DownloadManager.Request.NETWORK_MOBILE;
case ConnectivityManager.TYPE_WIFI:
DebugUtil.debugInfo("DownloadThread translateNetworkTypeToApiFlag: network type = TYPE_WIFI");
return DownloadManager.Request.NETWORK_WIFI;
case 9: //新增,安卓智能电视网络类型
DebugUtil.debugInfo("DownloadThread translateNetworkTypeToApiFlag: network type = 9");
return 9;
default:
DebugUtil.debugInfo("DownloadThread translateNetworkTypeToApiFlag: network type = UnKnow");
return 0;
}
}
2、ip获取
//获取wifi ip
// <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
public String getlocalip(Context m_Context){
String ip = "";
try {
DebugUtils.printInfo(TAG, "getlocalip");
WifiManager wifiManager = (WifiManager)m_Context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
if(0 == ipAddress){
ip = "获取失败";
}
ip = ((ipAddress & 0xff) + "." + (ipAddress>>8 & 0xff) + "." +(ipAddress>>16 & 0xff)+"."+(ipAddress>>24 & 0xff));
DebugUtils.printInfo(TAG, "ip=" + ip);
} catch (Exception e) {
DebugUtils.printInfo(TAG, "getlocalip 异常:" + e.toString());
e.printStackTrace();
}
return ip;
}
//获取有线和无线ip
private String getIP(){
String ip = "";
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ){
NetworkInterface intf = en.nextElement();
if (intf.getName().toLowerCase().equals("eth0") || intf.getName().toLowerCase().equals("wlan0")){
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
String ipaddress = inetAddress.getHostAddress().toString();
if(!ipaddress.contains("::")){//ipV6的地址
Log.e(TAG, "get ip=" + ipaddress);
ip = ipaddress;
Toast.makeText(getApplicationContext(), "" + ip, Toast.LENGTH_SHORT).show();
return ip;
}
}
}
} else {
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
Log.e(TAG, "get ip 失败");
return ip;
}
//获取设备名
public String getDeviceName(){
return new Build().MODEL;
}
分析:
(1)intf.getName().toLowerCase().equals("eth0") || intf.getName().toLowerCase().equals("wlan0")
这里表示:仅过滤无线和有线的ip. networkInterface是有很多的名称的 比如sim0,remt1.....等等.我不需要用到就直接过滤了
(2)if(!ipaddress.contains("::")){//ipV6的地址
这里表示: 过滤掉ipv6的地址.不管无线还是有线 都有这个地址, 我这边显示地址大体是:fe80::288:88ff:fe00:1%eth0 fe80::ee17:2fff:fece:c0b4%wlan0 一般都是出现在第一次循环.第二次循环就是真正的ipv4的地址.