关于Android开发时获取IP和MAC地址的问题

获取Android的IP地址和MAC地址

必须声明的是,本文是针对的是较新的安卓API ( Android 7.0以上 ) ,kotlin作为开发语言。



前言

在安卓开发 ( 尤其是针对较新的安卓API ) 时,我们可能会有获取机器的IP和MAC的需求。特地记录于此,以供参考使用。


一、获取权限?

在获取过程中首要且必须的步骤就是获取权限,这里需要两个权限:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

那么应该如何获取呢,我们需要修改项目中 AndroidManifest.xml 这个文件,借用安卓开发者文档的例子:

权限获取
将例子中 uses-permission 这一行替换成上述两个权限就可以了。

二、具体获取方法?

1.引入库

导入库的代码如下:

import java.net.InetAddress
import java.net.NetworkInterface
import java.net.SocketException
import java.util.*

2.获取IP地址

代码如下:

fun getIpAddress(): String? {
    try {
        val en: Enumeration<NetworkInterface> = NetworkInterface.getNetworkInterfaces()
        while (en.hasMoreElements()) {
            val nwInterface: NetworkInterface = en.nextElement()
            val enumIpAdder: Enumeration<InetAddress> = nwInterface.inetAddresses
            while (enumIpAdder.hasMoreElements()) {
                val netAddress: InetAddress = enumIpAdder.nextElement()
                if (!netAddress.isLoopbackAddress  && !netAddress.isLinkLocalAddress) {
                    return netAddress.hostAddress.toString()
                }
            }
        }
    } catch (e: SocketException) {
        e.printStackTrace()
    }
    return null
}

3.获取MAC地址

代码如下:

fun getMacAddress(): String? {
    try {
        val all: List<NetworkInterface> = Collections.list(NetworkInterface.getNetworkInterfaces())
        for (nif in all) {
            if (nif.name != "wlan0") {
                continue
            }
            val macBytes: ByteArray = nif.hardwareAddress ?: return ""
            val res1 = StringBuilder()
            for (b in macBytes) {
                res1.append(String.format("%02X:", b))
            }
            if (res1.isNotEmpty()) {
                res1.deleteCharAt(res1.length - 1)
            }
            return res1.toString()
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
    return null
}

将以上两个函数放入模块中,正常调用即可获得相应地址。
正文完结。


引用

该篇博客借鉴于以下两篇:

IP地址的获取
MAC地址的获取

于此感谢前人的无私奉献。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值