方法一:通过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的设备上。
分享到:
相关推荐
IMEI是手机硬件的全球唯一标识,它是由GSM(全球系统移动通信)和UMTS(通用分组无线服务)网络分配的。通过`TelephonyManager`类的`getDeviceId()`方法可以获取IMEI。然而,由于隐私保护政策,只有当应用具有`READ...
在这个场景下,"使用HttpClient调试android接口-通用方法"的标题表明我们将讨论如何使用HttpClient来调试Android应用中的API接口。下面,我们将深入探讨HttpClient的基础知识、调试技巧以及如何封装通用方法。 1. *...
总之,Android实现阿里OCR通用类文字识别Demo涉及到多个技术环节,包括图片处理、网络请求、第三方API调用、JSON解析以及UI展示等。通过学习和实践这个Demo,开发者可以掌握如何在Android应用中集成和使用OCR服务,...
在Android应用中,我们需确保设备具备网络权限,并且获取到打印机的IP地址和端口号。使用`InetAddress`解析IP地址,然后通过`Socket`创建连接。在连接建立后,可以发送数据流来控制打印机工作。 在设计通用型热敏...
其次,`NetworkUtils`是网络操作的工具类,通常包含一系列静态方法,用于方便地获取和检查网络状态。这些方法可能包括但不限于: 1. 检查网络是否可用:通过调用`ConnectivityManager`的`getActiveNetworkInfo()`...
这个名为"Android 通用 帮助类"的资源很可能是一个开源项目,它包含了Android开发中常用的工具方法,如文件操作、图片处理等。现在我们来详细探讨一下这些关键知识点。 1. **文件操作**: - 文件读写:Android系统...
在Android客户端开发中,抓取网络数据是常见的需求,它使得应用能够获取远程服务器上的信息,更新内容,发送用户数据等。本篇文章将详细讲解如何在Android应用中使用HTTP协议来实现这一功能,并结合标签"HTTP"以及...
3. **获取MAC地址**:在Android 8.0之前,可以直接通过`WifiManager`的`getMacAddress()`方法获取MAC地址。示例代码如下: ```java WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); ...
本资料包“安卓Android源码——比较通用的xml解析方法”将深入探讨在Android平台上解析XML的多种方法。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,创建一个树形结构,便于遍历和...
Android ijkplayer的...ijkplayer是一个轻量级视频播放器,支持播放本地网络视频和流媒体播放,提供了通用的API接口,支持Android和iOS平台。使用ijkplayer需要注意编译和配置问题,但是可以提供灵活的视频播放体验。
在Android应用开发中,工具类(Utils)和通用类(Common)是不可或缺的部分,它们能够帮助开发者快速实现一些常见的功能,提高代码复用性,降低项目复杂度。"Android-轻量级android工具类辅助类通用类"这个项目提供...
3. 网络通信:HTTP或HTTPS协议通常用于获取网络视频流。Android的HttpURLConnection或者第三方库如OkHttp、Volley等可以完成网络请求。 4. UI设计:包括播放、暂停按钮,进度条,全屏切换等元素。使用Android的XML...
- **权限管理**:在Android中,需要获取适当的权限,例如INTERNET和CAMERA权限,才能实现网络摄像头功能。 6. **文件7eb42a8095c64a3d83749574fe517653**:这个文件可能是项目中的一个组成部分,如源代码文件、...
在Android系统中,当你需要在应用程序中连接WiFi并获取网络的广播地址时,可以使用提供的API来实现这一功能。广播地址是局域网内所有设备都能接收到的数据包的目的地址,通常用于网络通信。以下将详细介绍如何在...
这个压缩包文件集合了在Java和Android开发中的一些通用方法,旨在帮助程序员提升开发效率。以下是这些方法的具体总结: 1. **GestureLock**: 这部分可能包含了手势解锁的实现,涉及到Android中的触摸事件处理、...
"安卓开发框架工具类相关-Android开发的通用工具类.zip" 提供了一组可能用于Android应用开发的通用工具类集合。虽然不能保证每个类都能直接运行,但它们可以作为学习和参考的资源,帮助开发者理解常见的功能实现。 ...
通过分析和实践这些实例,开发者可以深入理解Android SDK中的关键概念,如Activity生命周期、Intent通信机制、UI布局设计、数据存储、网络请求、多线程处理以及各种传感器的使用等。 1. **Activity生命周期**:每个...
在Android应用开发中,网络请求是必不可少的一部分,它涉及到数据的获取、同步更新以及用户体验的优化。本项目“Android-Androidapp网络请求时候一个通用的加载页面”关注的就是在网络请求过程中如何提供一个友好的...
【标题】:一种获取Android应用程序密码的方法 ...总结,这篇文档提供了一种获取Android应用程序密码的方法,涉及了移动设备数据提取的理论和技术,对于Android应用开发和安全研究具有很高的参考价值。
- **MAC地址**:通常通过`WifiManager`的`getMacAddress()`方法获取,但Android 6.0及以上版本为了用户隐私,返回的是随机值。在某些场景下,开发者可能需要使用其他方式来获取设备的网络标识。 - **IMEI**:IMEI...