android开发 获取WIFI和有线的IP地址

本文介绍了一种在Android设备上获取IPv4地址的方法,通过过滤特定网络接口和排除IPv6地址来实现。提供了详细的Java代码示例,展示了如何使用NetworkInterface和InetAddress类来获取有效的IP地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载:http://blog.youkuaiyun.com/value_liu/article/details/11815865


首先设置权限:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
  2. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  
  3. <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>  

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2. * if (intf.getName().toLowerCase().equals("eth0") || intf.getName().toLowerCase().equals("wlan0")) 
  3. * 表示:仅过滤无线和有线的ip. networkInterface是有很多的名称的 
  4. * 比如sim0,remt1.....等等.我不需要用到就直接过滤了 
  5.  
  6. * if (!ipaddress.contains("::"))  
  7. * 表示: 过滤掉ipv6的地址.不管无线还是有线 都有这个地址, 
  8. * 我这边显示地址大体是:fe80::288:88ff:fe00:1%eth0 fe80::ee17:2fff:fece:c0b4%wlan0 
  9. * 一般都是出现在第一次循环.第二次循环就是真正的ipv4的地址. 
  10.  
  11. * @return 
  12. * @throws SocketException 
  13. */  
  14. public String GetIpAddress() throws SocketException {  
  15. String ipaddress = "";  
  16. Enumeration<NetworkInterface> netInterfaces = null;  
  17. try {  
  18. netInterfaces = NetworkInterface.getNetworkInterfaces();  
  19. while (netInterfaces.hasMoreElements()) {  
  20. NetworkInterface intf = netInterfaces.nextElement();  
  21. if (intf.getName().toLowerCase().equals("eth0") | | intf.getName().toLowerCase().equals("wlan0")) {  
  22. for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {  
  23. InetAddress inetAddress = enumIpAddr.nextElement();  
  24. if (!inetAddress.isLoopbackAddress()) {  
  25. ipaddress = inetAddress.getHostAddress().toString();  
  26. if (!ipaddress.contains("::")) {// ipV6的地址  
  27. ipaddress = ipaddress;  
  28. }  
  29. }  
  30. }  
  31. else {  
  32. continue;  
  33. }  
  34. }  
  35. catch (Exception e) {  
  36. e.printStackTrace();  
  37. }  
  38. // final ContentResolver mContentResolver = getContentResolver();  
  39. // Settings.System.putInt( mContentResolver,  
  40. // Settings.System.WIFI_USE_STATIC_IP, 1);  
  41. // Settings.System.putString( mContentResolver,  
  42. // Settings.System.WIFI_STATIC_IP, "你的ip地址");  
  43.   
  44. return ipaddress;  
  45. }  
  46.   
  47.   
  48. public String getAddress() {  
  49. WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);  
  50. // 判断wifi是否开启  
  51. if (!wifiManager.isWifiEnabled()) {  
  52. wifiManager.setWifiEnabled(true);  
  53. }  
  54. WifiInfo wifiInfo = wifiManager.getConnectionInfo();  
  55. DhcpInfo info = wifiManager.getDhcpInfo();  
  56. int ipAddress = wifiInfo.getIpAddress();  
  57. int ii = info.ipAddress;  
  58. // return intToIp(ipAddress);  
  59. return ipAddress + "    dhcp: " + ii;  
  60.   
  61. }  
  62.   
  63.   
  64. private String intToIp(int i) {  
  65. return (i & 0xFF) + "." +  
  66. ((i >> 8) & 0xFF) + "." +  
  67. ((i >> 16) & 0xFF) + "." +  
  68. (i >> 24 & 0xFF);  
  69. }  
  70. }  
获取有线网络的MAC地址IP地址可以使用以下代码: ```java // 获取MAC地址 WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); String macAddress = wifiInfo.getMacAddress(); // 获取有线网络的MAC地址 try { NetworkInterface networkInterface = NetworkInterface.getByName("eth0"); byte[] macBytes = networkInterface.getHardwareAddress(); if (macBytes != null) { StringBuilder stringBuilder = new StringBuilder(); for (byte b : macBytes) { stringBuilder.append(String.format("%02X:", b)); } if (stringBuilder.length() > 0) { stringBuilder.deleteCharAt(stringBuilder.length() - 1); } String macAddress = stringBuilder.toString(); } } catch (SocketException e) { e.printStackTrace(); } // 获取IP地址 WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); int ipAddress = wifiManager.getConnectionInfo().getIpAddress(); String ip = Formatter.formatIpAddress(ipAddress); // 获取有线网络的IP地址 try { Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces(); while (enumeration.hasMoreElements()) { NetworkInterface networkInterface = enumeration.nextElement(); Enumeration<InetAddress> inetAddressEnumeration = networkInterface.getInetAddresses(); while (inetAddressEnumeration.hasMoreElements()) { InetAddress inetAddress = inetAddressEnumeration.nextElement(); if (!inetAddress.isLinkLocalAddress() && !inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { String ip = inetAddress.getHostAddress(); } } } } catch (SocketException e) { e.printStackTrace(); } ``` 需要注意的是,获取有线网络的MAC地址需要使用 `NetworkInterface` 类。由于不同的设备可能有不同的网络接口名称,因此需要根据实际情况来确定接口名称。在上面的代码中,我使用了 `eth0` 这个接口名称,这个名称在大多数Android设备上都是有效的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值