我在我的应用程序中使用了此代码,但警告说: “不推荐使用Formatter类型的formatIpAddress(int)方法”
android.text.format.Formatter.formatIpAddress(mWifiManager.getConnectionInfo().getIpAddress());
对此有什么快速解决方法?
答案 0 :(得分:17)
使用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;
}