Formatter.formatIpAddress(int)的替代方案;

时间:2013-12-30 19:27:49

标签: android

我在我的应用程序中使用了此代码,但警告说: “不推荐使用Formatter类型的formatIpAddress(int)方法”

android.text.format.Formatter.formatIpAddress(mWifiManager.getConnectionInfo().getIpAddress());

对此有什么快速解决方法?

7 个答案:

答案 0 :(得分:17)

The documentation states

  

使用getHostAddress(),它支持IPv4和IPv6地址。此方法不支持IPv6地址。

其中getHostAddress()指的是InetAddress.getHostAddress()

但是,WifiInfo只有一个ipv4地址作为int和AFAIK,没有实际的方法将其转换为InetAddress。弃用是因为该函数不支持ipv6,但WifiInfo也不支持。所以我要说使用formatIpAddress()因为它有效并添加@SuppressWarnings("deprecation")以消除警告。

答案 1 :(得分:16)

WifiInfo wifiinfo = manager.getConnectionInfo();
byte[] myIPAddress = BigInteger.valueOf(wifiinfo.getIpAddress()).toByteArray();
// you must reverse the byte array before conversion. Use Apache's commons library
ArrayUtils.reverse(myIPAddress);
InetAddress myInetIP = InetAddress.getByAddress(myIPAddress);
String myIP = myInetIP.getHostAddress();

所以myIP应该是你想要的。

答案 2 :(得分:2)

它已从api级别12弃用,而不是[getHostAdress();][1]。所以我建议添加suppresswarning注释并执行以下操作:

String myIpString = null;
if (apilevel < 12) {
    myIpString = formatIpAddress(...);
} else {
    myIpString = getHostAdress();
}

你可以通过这种方式获得设备的api级别:

int apiLevel = Integer.valueOf(android.os.Build.VERSION.SDK);

答案 3 :(得分:1)

穆罕默德·里亚兹(Muhammad Riyaz)方法的替代方法:

WifiInfo wifiInfo = manager.getConnectionInfo();
int ipInt = wifiInfo.getIpAddress()
String ip = InetAddress.getByAddress(
ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ipInt).array())
        .getHostAddress();

这样,您不必使用Apache的commons库。

答案 4 :(得分:0)

val ip = (InetAddress.getByAddress(ByteArray(4, { i ->
        (connectionInfo.ipAddress
            .shr(i * 8).and(255)).toByte()
    })) as Inet4Address).hostAddress

答案 5 :(得分:0)

也没有任何额外的依赖(注意使用了不同的 WifiManager wm = (WifiManager) requireContext().getApplicationContext().getSystemService(Context.WIFI_SERVICE); int ip = wm.getConnectionInfo().getIpAddress(); byte[] buffer = ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ip).array(); try { String dotNotation = InetAddress.getByAddress(buffer).getHostAddress(); } catch (UnknownHostException ignore) { } ):

{{1}}

答案 6 :(得分:-1)

通过添加@SuppressWarnings(&#34;弃用&#34;)来摆脱警告

@SuppressWarnings("deprecation")
public static String getLocalAddress()
{
    String iIPv4 = "";

    WifiManager wm = (WifiManager) theContext.getSystemService(Context.WIFI_SERVICE);

    iIPv4 = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

    return iIPv4;
}