我拿起了我的一些旧代码进行重建,其中一种用于我的平板电脑和手机的方法不再有效.我正在尝试使用我在这里获取的例程来获取我的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; }
解决方法
只是为了澄清一个完整的答案.
NetworkInterface.getNetworkInterfaces()
如果应用程序在AndroidManifest.xml中缺少此权限,则抛出SocketException
<uses-permission android:name="android.permission.INTERNET" />
在我的测试中(在Android 4.4.2上),可以跳过android.permission.ACCESS_NETWORK_STATE.