NetworkInterface.getNetworkInterfaces()抛出带有空消息字符串的exception

我拿起了我的一些旧代码进行重建,其中一种常用于平板电脑和手机的方法不再适用。 我正在尝试使用我在这里获取的例程来获取我的IP地址。

当程序执行第4行(以“for(枚举…”开头),它会立即跳转到exception捕获部分。exception没有消息,对于字符串,ex.getMessage()返回null。exception编号为830034796568(十进制)。

这是代码。 如上所述,这在一年前运作良好。

谢谢你的帮助!

public String getLocalIpAddress() { String address= null; try { for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration 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; } 

只是为了澄清一个完整的答案。

 NetworkInterface.getNetworkInterfaces() 

如果应用程序在AndroidManifest.xml缺少此权限,则抛出SocketException

  

在我的测试中(在Android 4.4.2上),可以跳过android.permission.ACCESS_NETWORK_STATE