IP地址问题

时间:2016-09-16 07:51:49

标签: android ip ip-address

此处获取IP地址存在问题。我已经看到了删除已弃用的 formatIpAddress 的所有可能方法,但没有什么能给我正确的解决方案我使用完全相同的MAC地址并获得了Mac地址但是当我使用IP地址时输出为0.0.0.0

守则是:

    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);

3 个答案:

答案 0 :(得分:0)

你是否为你的清单添加了权限(不太确定你是否需要它们)?

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

答案 1 :(得分: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"/>

答案 2 :(得分: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);