首页 > 其他分享 >获取安卓设备MAC地址工具类

获取安卓设备MAC地址工具类

时间:2023-04-22 21:22:36浏览次数:42  
标签:macAddress 安卓 res1 MAC 地址 VERSION Build import

获取安卓设备的MAC地址需要使用WifiManager,以下是一个获取MAC地址的工具类:

```
import android.annotation.SuppressLint;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.text.TextUtils;

import java.net.NetworkInterface;
import java.util.Collections;
import java.util.List;

public class DeviceInfoUtils {

    /**
     * 获取设备 MAC 地址
     *
     * @param context 上下文
     * @return 设备 MAC 地址
     */
    @SuppressLint({"HardwareIds", "MissingPermission"})
    public static String getDeviceMacAddress(Context context) {
        String macAddress = "";
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // Android 6.0 以下
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            if (wifiManager != null) {
                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                if (wifiInfo != null) {
                    macAddress = wifiInfo.getMacAddress();
                }
            }
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { // Android 6.0 - Android 10.0
            try {
                List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
                for (NetworkInterface nif : all) {
                    if (!nif.getName().equalsIgnoreCase("wlan0")) {
                        continue;
                    }

                    byte[] macBytes = nif.getHardwareAddress();
                    if (macBytes == null) {
                        return "";
                    }

                    StringBuilder res1 = new StringBuilder();
                    for (byte macByte : macBytes) {
                        res1.append(String.format("%02X:", macByte));
                    }

                    if (res1.length() > 0) {
                        res1.deleteCharAt(res1.length() - 1);
                    }

                    macAddress = res1.toString();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Android 10.0 以上
            try {
                String iface = "wlan0";
                NetworkInterface networkInterface = NetworkInterface.getByName(iface);
                if (networkInterface == null) {
                    return "";
                }
                byte[] hardwareAddress = networkInterface.getHardwareAddress();
                if (hardwareAddress == null || hardwareAddress.length == 0) {
                    return "";
                }
                StringBuilder builder = new StringBuilder();
                for (byte b : hardwareAddress) {
                    builder.append(String.format("%02X:", b));
                }
                if (builder.length() > 0) {
                    builder.deleteCharAt(builder.length() - 1);
                }
                macAddress = builder.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return macAddress;
    }
}
```
调用该工具类获取设备的MAC地址:

```
String macAddress = DeviceInfoUtils.getDeviceMacAddress(context);
``` 
需要注意的是,Android 6.0 以上获取 MAC 地址需要申请 ACCESS_WIFI_STATE 权限。另外,从 Android Q 开始,不能直接获取设备的 MAC 地址,需要使用其他方式来获取设备的唯一标识符。

  

标签:macAddress,安卓,res1,MAC,地址,VERSION,Build,import
From: https://www.cnblogs.com/chenKnowledgeConllection/p/17344011.html

相关文章

  • NAT(网络地址转换)
        NAT是将私有IP地址通过边界路由转换成外网IP地址,在边界路由的NAT地址转换表记录下这个转换映射记录,当外部数据返回时,路由使用NAT技术查询NAT转换表,再将目标地址替换成内网用户IP地址。1.静态NAT(basic基本NAT)    静态NAT就是一对一映射,内部有多少私有地址需要......
  • ZLMediaKit实现按需拉流时rtsp流地址不对addStreamProxy返回0,接口流id参数踩坑记录
    场景开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放:开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rts基于上面实现拉取视频流预览时,发现当调用api传参时如果更换了rtsp视频流地址,但是没有更改流......
  • Microsoft PowerPoint LTSC 2021 for Mac(ppt演示工具) v16.73 beta版
    MicrosoftPowerPointLTSC2021forMac是一款专业的幻灯片演示软件,适用于苹果电脑。是office LTSC2021套装中的一个组成部分,与Word、Excel和Outlook等其他应用程序一起提供。PowerPointLTSC2021具有许多易于使用的工具和功能,可以帮助用户创建具有吸引力的演示文稿。Microsoft......
  • mac冒险游戏:神奇宝盒:冒险建造者Wonderbox for mac 中文版
    Wonderbox是一款由 AquirisGameStudio开发的跨平台冒险游戏。在这个游戏中,玩家将进入一个充满奇幻和创造性的世界,并且可以使用各种工具和素材来创建自己的世界。Wonderbox的游戏特色主要包括以下几点:创造性玩法-玩家可以在游戏中使用各种不同的工具和素材来建造自己的世界,......
  • Mac中 ~/.bashrc 或 ~/.bash_profile 的问题 [转载]
    1.问题描述熟练使用Linux的人会知道,环境变量是在~/.bashrc或~/.bash_profile中进行配置的;在MacOS中,同样也可以在这两个文件中配置环境变量,但是每次打开命令行时都需要输入source~/.bashrc或source~/.bash_profile才能生效,无法自动生效。2.解决方案需要注意的一点是,与Linu......
  • react18中antd的Upload组件上传头像,并且拿到服务器返回的头像的url地址在页面中显示头
    业务需求:上传头像,上传完毕后拿到头像的url,把头像展示在页面中,最终把头像url和其他用户信息一起发送给服务器 上传头像流程 导入Upload组件和图标(一个加号,一个加载中)import{Upload}from'antd';import{PlusOutlined,LoadingOutlined}from'@ant-design/ic......
  • Mac连接Windows上的mysql服务器
    1、关闭Windows的防火墙2、在Windows上新建入站规则,允许访问3306端口  一直下一步,完成设置3、在Windows上更新mysql的root用户的host为'%'selecthost,userfromuser;updateusersethost='%'whereuser='root';flushprivileges; 4、在MAC上连接Windows上......
  • 如何把Mac上的文件传输到Windows电脑上
    前提是两台电脑在同一个局域网内!!!!1、在Windows上新建共享文件夹 2、打开Windows的smb共享支持3、打开访达->前往->连接服务器4、点击“连接”,成功后访达左边菜单栏就会出现Windows的共享文件夹5、把MAC里的文件就可直接拖动至Windows共享的文件夹里,Windows上就可以看到......
  • mac brew git安装和卸载
    1.直接使用国内镜像安装/bin/zsh-c"$(curl-fsSLhttps://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"随便选择镜像2.大概需要10分钟左右安装结束根据结束后的红色字体提示,运行:source/Users/xxxx/.zprofile 注意:把xxxx替换为自己的名字,最好是复制红色......
  • v3+ts中使用百度地图 附带搜索地址
     话不多说直接上源码letaddressInfo=reactive({longitude:"",//经度latitude:"",//纬度province:"",//省city:"",//市district:"",//区address:"",//详细地址});letopenMap=ref(fals......