我在我的应用程序中使用了这段代码,但警告说: "不推荐使用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应该是你想要的.
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 的公共库。