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

Pro*_*sts 16 android

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

android.text.format.Formatter.formatIpAddress(mWifiManager.getConnectionInfo().getIpAddress());
Run Code Online (Sandbox Code Playgroud)

什么是快速解决方案?

laa*_*lto 18

文件说明

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

在哪里getHostAddress()InetAddress.getHostAddress().

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


Muh*_*yaz 17

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();
Run Code Online (Sandbox Code Playgroud)

所以myIP应该是你想要的.


jpi*_*ihl 8

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();
Run Code Online (Sandbox Code Playgroud)

这样您就不必使用 Apache 的公共库。