package com.guo.duoduo.airplayreceiver.utils;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
/**
* Created by guo.duoduo on 2015/8/24.
*/
public class NetworkUtils
{
public synchronized static Inet4Address getLocalIpAddress()
{
try
{
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();)
{
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr
.hasMoreElements();)
{
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress())
{
if (inetAddress instanceof Inet4Address)
{
return ((Inet4Address) inetAddress);
}
}
}
}
}
catch (SocketException ex)
{
}
return null;
}
public synchronized static String[] getMACAddress(InetAddress ia) throws Exception
{
//获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
//下面代码是把mac地址拼装成String
String[] str_array = new String[2];
StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = new StringBuffer();
for (int i = 0; i < mac.length; i++)
{
if (i != 0)
{
sb1.append(":");
}
//mac[i] & 0xFF 是为了把byte转化为正整数
String s = Integer.toHexString(mac[i] & 0xFF);
sb1.append(s.length() == 1 ? 0 + s : s);
sb2.append(s.length() == 1 ? 0 + s : s);
}
//把字符串所有小写字母改为大写成为正规的mac地址并返回
str_array[0] = sb1.toString();
str_array[1] = sb2.toString();
return str_array;
//return sb1.toString().toUpperCase();
}
public static String getLocalIp(Context context)
{
//获取wifi服务
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
//判断wifi是否开启
if (!wifiManager.isWifiEnabled())
{
wifiManager.setWifiEnabled(true);
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ip = intToIp(ipAddress);
return ip;
}
public static boolean isWifiConnected(Context context)
{
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取状态
NetworkInfo.State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.getState();
//判断wifi已连接的条件
if (wifi == NetworkInfo.State.CONNECTED)
return true;
else
return false;
}
private static String intToIp(int i)
{
return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "."
+ (i >> 24 & 0xFF);
}
}