我试图在此处获取连接的wifi的本地IP
final WifiManager manager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
但这不会转换为WifiManager
。我在最新的android ide中看到一条红线:
Suspicious cast to WifiManager for a WIFI_SERVICE: expected WifiManager
因此我无法访问
final DhcpInfo dhcp = manager.getDhcpInfo();
我正在使用api 28,所以这是什么问题。我用所有在谷歌上找到的解决方案都用谷歌搜索。
答案 0 :(得分:0)
您可以像这样获得WifiConnectionManager:
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
...,您的IP地址为:
wifi.getDhcpInfo().ipAddress
希望有帮助。
答案 1 :(得分:0)
获取IP地址的另一种方法是执行以下操作:
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipNum = wifiInfo.getIpAddress();
String myIPAddress = Formatter.formatIpAddress(ipNum);
您输入的上述答案应类似于:
import android.net.wifi.WifiManager;
import android.net.wifi.WifiInfo;
import java.util.Formatter;
现在,myIPAddress
包含您的WiFi网络的IP地址。您还应该确保在AndroidManifest.xml
中具有以下权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
答案 2 :(得分:0)
根据Android官方文档,您向我们展示的源代码段是正确的。
如果代码给出错误,我知道两个合理的解释:
您可能导入了错误的WifiManager
类。检查您是否已导入android.net.wifi.WifiManager
,而不是其他版本。
这可能是您的Android IDE中的问题。重新启动/刷新IDE看看错误是否消失。
错误消息
Suspicious cast to WifiManager for a WIFI_SERVICE: expected WifiManager
表示此问题已由Android特定的检查解决,而不是作为(纯)Java编译错误。如果这是Java编译错误,则强制转换将被描述为不正确,而不是可疑的。
从Java的角度来看,这是从java.lang.Object
到某些WifiManager
类的转换。在编译时这是合法的。
该错误消息来自某些特定于Android的检查。这是说“嘿,哇,这将在运行时提供类强制转换异常”。问题是:为什么会这样呢?
答案 3 :(得分:-2)
解决方案更改了导入来源。
import android.net.NetworkInfo;
到
import android.net.wifi.WifiManager;