`

android获取网络地址通用方法

阅读更多

 

方法一:通过NetworkInterface获得所有网络设备的ip地址(包括ipv4和ipv6地址)
实现一:

String networkIp = "";
try {
    List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
    for(NetworkInterface iface : interfaces){
        if(iface.getDisplayName().equals("wlan0")){
            List<InetAddress> addresses = Collections.list(iface.getInetAddresses());
            for(InetAddress address : addresses){
                if(address instanceof Inet4Address){
                    networkIp = address.getHostAddress();
                }
            }
        }
    }
} catch (SocketException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
 

 

实现二:

String networkIp = "";
try {
    Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
    while(en.hasMoreElements()){
        NetworkInterface ni = en.nextElement();
        Log.i(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",ni.getDisplayName());
        Enumeration<InetAddress> enIp = ni.getInetAddresses();
        while(enIp.hasMoreElements()){
            InetAddress inet = enIp.nextElement();
            if(!inet.isLoopbackAddress() && (inet instanceof Inet4Address)){
                networkIp = inet.getHostAddress().toString();
            }
        }
    }
    Log.i(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", "getIp end");
} catch (SocketException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

 

 
说明:
1.获取指定网络接口设备的地址,可通过NetworkInterface的getDisplayName()方法获取设备名称进行对比。
2.获取指定ipv4或者ipv6地址,可通过NetworkInterface的getInetAddress()方法获取到InetAddress列表进行遍历,对每个对象的类型进行判断即可(即instanceof Inet4Address或者Inet6Address)
3.推荐使用实现一,其实原理都是一样的,只因为实现一通过Collections的list方法将泛型Enumeration接口转换成List接口,代码更加简洁易懂。

 

方法二:通过WifiInfo获得wifi的ipv4地址

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String networkIp = "";
int hostAddress = (wifiInfo == null) ? 0 : wifiInfo.getIpAddress();
byte[] addressByte = {
        (byte)(0xff & hostAddress),
        (byte)(0xff & (hostAddress >> 8)),
        (byte)(0xff & (hostAddress >> 16)),
        (byte)(0xff & (hostAddress >> 24))
};
InetAddress inet = null;
try {
    inet = InetAddress.getByAddress(addressByte);
    networkIp = inet.getHostAddress().toString();
} catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

 
这种方法的局限性不言而喻,只能获取wifi的ipv4地址,且只能用于android设备,而NetworkInterface使用于所有可以使用java的设备上。

 

 

分享到:
评论

相关推荐

    Android中获取唯一的ID的几种方法

    IMEI是手机硬件的全球唯一标识,它是由GSM(全球系统移动通信)和UMTS(通用分组无线服务)网络分配的。通过`TelephonyManager`类的`getDeviceId()`方法可以获取IMEI。然而,由于隐私保护政策,只有当应用具有`READ...

    使用HttpClient调试android接口-通用方法

    在这个场景下,"使用HttpClient调试android接口-通用方法"的标题表明我们将讨论如何使用HttpClient来调试Android应用中的API接口。下面,我们将深入探讨HttpClient的基础知识、调试技巧以及如何封装通用方法。 1. *...

    Android实现阿里OCR通用类文字识别Demo

    总之,Android实现阿里OCR通用类文字识别Demo涉及到多个技术环节,包括图片处理、网络请求、第三方API调用、JSON解析以及UI展示等。通过学习和实践这个Demo,开发者可以掌握如何在Android应用中集成和使用OCR服务,...

    Android-通用型热敏打印机接口wifi蓝牙

    在Android应用中,我们需确保设备具备网络权限,并且获取到打印机的IP地址和端口号。使用`InetAddress`解析IP地址,然后通过`Socket`创建连接。在连接建立后,可以发送数据流来控制打印机工作。 在设计通用型热敏...

    android 实时监测网络常用工具类

    其次,`NetworkUtils`是网络操作的工具类,通常包含一系列静态方法,用于方便地获取和检查网络状态。这些方法可能包括但不限于: 1. 检查网络是否可用:通过调用`ConnectivityManager`的`getActiveNetworkInfo()`...

    Android 通用 帮助类

    这个名为"Android 通用 帮助类"的资源很可能是一个开源项目,它包含了Android开发中常用的工具方法,如文件操作、图片处理等。现在我们来详细探讨一下这些关键知识点。 1. **文件操作**: - 文件读写:Android系统...

    Android客户端抓取网络数据

    在Android客户端开发中,抓取网络数据是常见的需求,它使得应用能够获取远程服务器上的信息,更新内容,发送用户数据等。本篇文章将详细讲解如何在Android应用中使用HTTP协议来实现这一功能,并结合标签"HTTP"以及...

    Android 移动端获取设备MAC Demo

    3. **获取MAC地址**:在Android 8.0之前,可以直接通过`WifiManager`的`getMacAddress()`方法获取MAC地址。示例代码如下: ```java WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); ...

    安卓Android源码——比较通用的xml解析方法.rar

    本资料包“安卓Android源码——比较通用的xml解析方法”将深入探讨在Android平台上解析XML的多种方法。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,创建一个树形结构,便于遍历和...

    Android ijkplayer的使用方法解析

    Android ijkplayer的...ijkplayer是一个轻量级视频播放器,支持播放本地网络视频和流媒体播放,提供了通用的API接口,支持Android和iOS平台。使用ijkplayer需要注意编译和配置问题,但是可以提供灵活的视频播放体验。

    Android-轻量级android工具类辅助类通用类

    在Android应用开发中,工具类(Utils)和通用类(Common)是不可或缺的部分,它们能够帮助开发者快速实现一些常见的功能,提高代码复用性,降低项目复杂度。"Android-轻量级android工具类辅助类通用类"这个项目提供...

    android网络视频播放器(完整可运行).zip

    3. 网络通信:HTTP或HTTPS协议通常用于获取网络视频流。Android的HttpURLConnection或者第三方库如OkHttp、Volley等可以完成网络请求。 4. UI设计:包括播放、暂停按钮,进度条,全屏切换等元素。使用Android的XML...

    android wifi网络摄像头源代码

    - **权限管理**:在Android中,需要获取适当的权限,例如INTERNET和CAMERA权限,才能实现网络摄像头功能。 6. **文件7eb42a8095c64a3d83749574fe517653**:这个文件可能是项目中的一个组成部分,如源代码文件、...

    android连接wifi时获取广播地址代码

    在Android系统中,当你需要在应用程序中连接WiFi并获取网络的广播地址时,可以使用提供的API来实现这一功能。广播地址是局域网内所有设备都能接收到的数据包的目的地址,通常用于网络通信。以下将详细介绍如何在...

    java和android通用的方法总结

    这个压缩包文件集合了在Java和Android开发中的一些通用方法,旨在帮助程序员提升开发效率。以下是这些方法的具体总结: 1. **GestureLock**: 这部分可能包含了手势解锁的实现,涉及到Android中的触摸事件处理、...

    安卓开发框架工具类相关-Android开发的通用工具类.zip

    "安卓开发框架工具类相关-Android开发的通用工具类.zip" 提供了一组可能用于Android应用开发的通用工具类集合。虽然不能保证每个类都能直接运行,但它们可以作为学习和参考的资源,帮助开发者理解常见的功能实现。 ...

    Android 20个通用具体应用程序实例源

    通过分析和实践这些实例,开发者可以深入理解Android SDK中的关键概念,如Activity生命周期、Intent通信机制、UI布局设计、数据存储、网络请求、多线程处理以及各种传感器的使用等。 1. **Activity生命周期**:每个...

    Android-Androidapp网络请求时候一个通用的加载页面

    在Android应用开发中,网络请求是必不可少的一部分,它涉及到数据的获取、同步更新以及用户体验的优化。本项目“Android-Androidapp网络请求时候一个通用的加载页面”关注的就是在网络请求过程中如何提供一个友好的...

    一种获取Android应用程序密码的方法.pdf

    【标题】:一种获取Android应用程序密码的方法 ...总结,这篇文档提供了一种获取Android应用程序密码的方法,涉及了移动设备数据提取的理论和技术,对于Android应用开发和安全研究具有很高的参考价值。

    Android市场审核,用于检查是否提前调用mac地址及imei等信息

    - **MAC地址**:通常通过`WifiManager`的`getMacAddress()`方法获取,但Android 6.0及以上版本为了用户隐私,返回的是随机值。在某些场景下,开发者可能需要使用其他方式来获取设备的网络标识。 - **IMEI**:IMEI...

Global site tag (gtag.js) - Google Analytics