2016-09-16 86 views
0

这里有一个获取IP地址的问题。我已经看到所有可能的方式来删除已弃用的formatIpAddress但没有任何东西给我正确的解决方案我已经使用MAC地址完全相同的方式,我得到了Mac地址但是当我使用IP地址输出是0.0.0.0。问题在IP地址

的代码是:

WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
    //Ip Address 
    int ipAddress = wifiInfo.getIpAddress(); 
    String ip = Formatter.formatIpAddress(wifiManager.getConnectionInfo().getIpAddress()); 
    TextView ip_address= (TextView) v.findViewById(R.id.ip_address_mobfragment); 
    ip_address.setText(""+ip); 
+0

奇怪的东西,检查你的代码,得到的结果诠释ip地址= -1879004992,字符串IP = 192.168.0.144 – DEADMC

+0

那么什么是解决方案吗? – Abhi

+0

嗯,你的测试环境是什么?模拟器,真实设备,...?它连接到互联网吗? – jdstaerk

回答

0

嗯,我有我自己的疑难问题的解决方案已经用这种方法来打印IP

这里是我的代码:

public class Utils { 

/** 
* Convert byte array to hex string 
* @param bytes 
* @return 
*/ 
public static String bytesToHex(byte[] bytes) { 
    StringBuilder sbuf = new StringBuilder(); 
    for(int idx=0; idx < bytes.length; idx++) { 
     int intVal = bytes[idx] & 0xff; 
     if (intVal < 0x10) sbuf.append("0"); 
     sbuf.append(Integer.toHexString(intVal).toUpperCase()); 
    } 
    return sbuf.toString(); 
} 

/** 
* Get utf8 byte array. 
* @param str 
* @return array of NULL if error was found 
*/ 
public static byte[] getUTF8Bytes(String str) { 
    try { return str.getBytes("UTF-8"); } catch (Exception ex) { return null; } 
} 

/** 
* Load UTF8withBOM or any ansi text file. 
* @param filename 
* @return 
* @throws java.io.IOException 
*/ 
public static String loadFileAsString(String filename) throws java.io.IOException { 
    final int BUFLEN=1024; 
    BufferedInputStream is = new BufferedInputStream(new FileInputStream(filename), BUFLEN); 
    try { 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(BUFLEN); 
     byte[] bytes = new byte[BUFLEN]; 
     boolean isUTF8=false; 
     int read,count=0; 
     while((read=is.read(bytes)) != -1) { 
      if (count==0 && bytes[0]==(byte)0xEF && bytes[1]==(byte)0xBB && bytes[2]==(byte)0xBF) { 
       isUTF8=true; 
       baos.write(bytes, 3, read-3); // drop UTF8 bom marker 
      } else { 
       baos.write(bytes, 0, read); 
      } 
      count+=read; 
     } 
     return isUTF8 ? new String(baos.toByteArray(), "UTF-8") : new String(baos.toByteArray()); 
    } finally { 
     try{ is.close(); } catch(Exception ex){} 
    } 
} 

/** 
* Returns MAC address of the given interface name. 
* @param interfaceName eth0, wlan0 or NULL=use first interface 
* @return mac address or empty string 
*/ 
public static String getMACAddress(String interfaceName) { 
    try { 
     List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); 
     for (NetworkInterface intf : interfaces) { 
      if (interfaceName != null) { 
       if (!intf.getName().equalsIgnoreCase(interfaceName)) continue; 
      } 
      byte[] mac = intf.getHardwareAddress(); 
      if (mac==null) return ""; 
      StringBuilder buf = new StringBuilder(); 
      for (int idx=0; idx<mac.length; idx++) 
       buf.append(String.format("%02X:", mac[idx])); 
      if (buf.length()>0) buf.deleteCharAt(buf.length()-1); 
      return buf.toString(); 
     } 
    } catch (Exception ex) { } // for now eat exceptions 
    return ""; 
    /*try { 
     // this is so Linux hack 
     return loadFileAsString("/sys/class/net/" +interfaceName + "/address").toUpperCase().trim(); 
    } catch (IOException ex) { 
     return null; 
    }*/ 
} 


public static String getIPAddress(boolean useIPv4) { 
    try { 
     List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); 
     for (NetworkInterface intf : interfaces) { 
      List<InetAddress> addrs = Collections.list(intf.getInetAddresses()); 
      for (InetAddress addr : addrs) { 
       if (!addr.isLoopbackAddress()) { 
        String sAddr = addr.getHostAddress(); 
        //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); 
        boolean isIPv4 = sAddr.indexOf(':')<0; 

        if (useIPv4) { 
         if (isIPv4) 
          return sAddr; 
        } else { 
         if (!isIPv4) { 
          int delim = sAddr.indexOf('%'); // drop ip6 zone suffix 
          return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase(); 
         } 
        } 
       } 
      } 
     } 
    } catch (Exception ex) { } // for now eat exceptions 
    return ""; 
} 

,并在那里我必须使用活动是:

String ip=Utils.getIPAddress(true); 
0

没有你添加的权限,您的清单(不太清楚,如果你需要他们TBH)?

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

是的,我已经获得清单许可。 – Abhi

0

试试这个工作对我来说

WifiManager wm = (WifiManager)getActivity().getSystemService(getActivity().WIFI_SERVICE); 
    String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); 
    Log.d("ipaddress",""+ip); 

AndroidManifest.xml中

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
+0

0.0.0.0来自您的解决方案。 – Abhi

+0

添加权限ACCESS_WIFI_STATE –

+0

我已经完成了更早的权限。 – Abhi