我选择了一些我的旧代码进行重建,其中一种常用于平板电脑和手机的方法不再适用。我正在尝试使用我在这里获取的例程来获取我的IP地址。
当程序执行第4行时(以“for(枚举...”开头),它会立即跳转到异常捕获部分。异常没有消息,对于字符串,ex.getMessage()返回null。异常编号是830034796568(十进制)。
这是代码。如上所述,一年前这种方法运作良好。
感谢您的帮助!
public String getLocalIpAddress() {
String address= null;
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
address = new String(inetAddress.getHostAddress().toString());
if (!inetAddress.isLoopbackAddress() && address.length() < 18) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
String msg = ex.getMessage();
//do nothing
}
return null;
}
答案 0 :(得分:13)
只是澄清一个完整的答案。
NetworkInterface.getNetworkInterfaces()
如果应用程序在SocketException
中缺少此权限,则会抛出AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
在我的测试中(在Android 4.4.2上),可以跳过android.permission.ACCESS_NETWORK_STATE
。