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的地址.