大家好,我们这一节讲一下,Android获取Ip的一些方法,在我们开发中,有判断手机是否联网,或者想获得当前手机的Ip地址,当然WIFI连接的和
我们3G卡的Ip地址当然是不一样的.
首先我尝试了如下方法:
- WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
- WifiInfo wifiInfo = wifiManager.getConnectionInfo();
- int ipAddress = wifiInfo.getIpAddress();
但是获得的居然是一个整数,我尝试了用些数学方法都没有成功!,所以这种方法不可取!
最后查了一些资料,发现如下方法是比较通用的,我尝试了WIFI和G3卡,都获取了争取的Ip地址:代码如下:
- public String 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()) {
- return inetAddress.getHostAddress().toString();
- }
- }
- }
- } catch (SocketException ex) {
- Log.e(LOG_TAG, ex.toString());
- }
- return null;
- }
当我的手机处于飞行状态是,获得Ip地址为空,刚好符合要求!!!
// 将十进制整数形式转换成127.0.0.1形式的ip地址
public static String longToIP(long longIp) {
// linux long是低位在前,高位在后
StringBuffer sb = new StringBuffer("");
// 将高24位置0
sb.append(String.valueOf((longIp & 0x000000FF)));
sb.append(".");
// 将高16位置0,然后右移8位
sb.append(String.valueOf((longIp & 0x0000FFFF) >>> 8));
sb.append(".");
// 将高8位置0,然后右移16位
sb.append(String.valueOf((longIp & 0x00FFFFFF) >>> 16));
sb.append(".");
// 直接右移24位
sb.append(String.valueOf((longIp >>> 24)));
return sb.toString();
}