API 31已弃用getIpAddress()需要帮助从回调实现获取地址
val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {}
@RequiresApi(Build.VERSION_CODES.Q)
override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities)
val wifiInfo = networkCapabilities.transportInfo as? WifiInfo
}
override fun onLinkPropertiesChanged(network: Network, linkProperties: LinkProperties) {
super.onLinkPropertiesChanged(network, linkProperties)
// val ipV4Address = ?
}
};
5条答案
按热度按时间vxqlmq5t1#
对于已弃用的方法,您可以阅读正式的android文档,如documnet syas:
此方法已在API级别31中弃用。使用LinkProperties上的方法,这些方法可以通过NetworkCallback#onLinkPropertiesChanged(Network,LinkProperties)或ConnectivityManager#getLinkProperties(Network)获得。
因此,通过我在这里添加方法,您可以获得所有IP地址:
***注意:***link.linkAddresses方法可能返回地址数组
kmpatx3s2#
在Wifi网络上获取IP地址(如
192.168.1.123
):c3frrgcw3#
如果不想使用回调方法,现在应该通过ConnectivityManager.getLinkProperties()函数获取IP地址。根据链接中的文档,此函数自API 21(Android 5)起可用,因此如果您的minSDK>= 21,则可以将当前获取IP地址的方法替换为建议的方法:
您需要过滤返回的结果,因为将有多个ipV6地址,而只有一个ipV4地址。以下是从
linkAddresses
返回的未过滤的内容:这就是为什么这里的其他答案之一不完全正确,因为没有人保证ipV4地址将在索引1下。
yqyhoc1h4#
Java代码:
of1yzvn45#