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

时间:2013-04-21 02:07:37

标签: android ip-address

我选择了一些我的旧代码进行重建,其中一种常用于平板电脑和手机的方法不再适用。我正在尝试使用我在这里获取的例程来获取我的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;
}

1 个答案:

答案 0 :(得分:13)

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

NetworkInterface.getNetworkInterfaces()
如果应用程序在SocketException

中缺少此权限,则

会抛出AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

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