我拿起了我的一些旧代码进行重建,其中一种用于我的平板电脑和手机的方法不再有效.我正在尝试使用我在这里获取的例程来获取我的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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。