当前位置: 首页 > news >正文

【Android】不同系统版本获取设备MAC地址

【Android】不同系统版本获取设备MAC地址

  • 尝试
  • 实现

尝试

在开发过程中,想要获取MAC地址,最开始想到的就是WifiManager,但结果始终返回02:00:00:00:00:00,由于用得是wifi ,考虑是不是因为用得网线的原因,但用了wifi 依旧不行。通过Android中Wifi未开启情况下获取Mac地址了解到,WifiManager在无网络情况下也可以获取MAC地址,那么现在无法获取到 正确地址的原因并不是网线和wifi 的问题。

后来考虑用指令cat /sys/class/net/wlan0/address的方式去获取MAC地址,但依旧不行,返回还是02:00:00:00:00:00,那就很奇怪了。

最终找到了一篇大神写的博文详解Android MacAddress 适配心得,很完美的解决了我以上的问题,原来从android 6.0及以上、7.0以下 就不能通过 wifimanager 获取mac,否则获取到的mac将是固定的:02:00:00:00:00:00 。android sdk后来做了6.0适配,通过cat /sys/class/net/wlan0/address,可以在6.0上获取mac地址,但是android 7.0及以上依旧无法获取到mac地址

由于安装的设备是android 9.0的,所有无法获取正确MAC,针对这些情况,博文中给出了3种方案来实现android 7.0以上的mac地址获取:

  • 通过busybox获取本地存储的mac地址
  • 扫描各个网络接口获取mac地址
  • 通过ip地址来获取绑定的mac地址

实现

而我主要使用第三种方案进行了实现,而且不用配置xml 权限,代码如下:

/*** 获取设备的Mac地址* @return Mac地址*/public String getLocalMacAddress(){String strMacAddr = "";try {InetAddress ip = getLocalInetAddress();byte[] b = NetworkInterface.getByInetAddress(ip).getHardwareAddress();StringBuffer buffer = new StringBuffer();for (int i = 0; i < b.length; i++) {if (i != 0) {buffer.append(':');}String str = Integer.toHexString(b[i]&0xFF);buffer.append(str.length() == 1 ? 0 + str : str);}strMacAddr = buffer.toString().toLowerCase();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return strMacAddr;}/*** 获取设备本地IP*/protected InetAddress getLocalInetAddress() {InetAddress ip = null;try {//列举Enumeration en_netInterface = NetworkInterface.getNetworkInterfaces();//避免多张网卡while (en_netInterface.hasMoreElements()) {//是否还有元素NetworkInterface ni = (NetworkInterface) en_netInterface.nextElement();//得到下一个元素Enumeration en_ip = ni.getInetAddresses();//得到一个ip地址的列举while (en_ip.hasMoreElements()) {ip = (InetAddress) en_ip.nextElement();if (!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1)break;elseip = null;}if (ip != null) {break;}}} catch (Exception e) {e.printStackTrace();}return ip;}

输出结果如下:

在这里插入图片描述

使用的话,只要String mac = getLocalMacAddress(); 即可。在这个过程中,尤其要注意,一台设备可能会存在多张网卡,那么对应就会有个mac地址。所以建议采用本地ip 获取mac的方式去进行,当然也可以直接在 getLocalInetAddress() 中打印输出所有的mac,就像博文中展示的那样。

相关文章:

【Android】不同系统版本获取设备MAC地址

【Android】不同系统版本获取设备MAC地址 尝试实现 尝试 在开发过程中&#xff0c;想要获取MAC地址&#xff0c;最开始想到的就是WifiManager&#xff0c;但结果始终返回02:00:00:00:00:00&#xff0c;由于用得是wifi &#xff0c;考虑是不是因为用得网线的原因&#xff0c;但…...

残差网络--NLP上的应用

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;残差网络&#xff08;ResNet&#xff09;同样有着广泛的应用。虽然最初的残差网络设计是为了处理图像任务&#xff0c;但其核心思想也被成功地迁移到了自然语言处理任务中&#xff0c;以解决深层神经网络中的退化问题…...

1章4节:数据可视化, R 语言的静态绘图和 Shiny 的交互可视化演示(更新2024/08/14)

在数据科学的世界中,“一图胜千言”的古老谚语依然适用。数据可视化不仅仅是将数据以图形化的方式展现,更是帮助我们发现数据背后隐藏模式、趋势和异常的强大工具。R语言作为数据科学的主要编程语言之一,以其强大的可视化能力而闻名,许多数据科学家和分析师因此选择了R作为…...

浅谈个人用户如何玩转HTTP代理

今天&#xff0c;准备和大家聊聊我是如何玩转HTTP代理的&#xff0c;希望能给大家带来一些启发和帮助。 犹记得刚开始接触HTTP代理时&#xff0c;我对它还是一无所知。那时我总被各种网络限制所困扰&#xff0c;无法随心所欲地访问我想看的网站。直到HTTP代理的出现&#xff0c…...

动手研发实时口译系统

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

C#(asp.net)电商后台管理系统-计算机毕业设计源码70015

摘 要 随着互联网技术的不断发展&#xff0c;电商行业也越来越受到人们的关注。为了提高电商行业的管理效率和服务水平&#xff0c;本文提出了一种基于ASP.NET电商后台管理系统的设计与实现方案。 电商管理系统基于VisualStudio开发平台&#xff0c;采用C#编程语言和ASP.NET等技…...

Unity 中创建动画的教程

Unity 动画创建教程 在游戏开发中&#xff0c;生动的动画能够极大地提升玩家的体验。在这篇教程中&#xff0c;我们将一起探索如何在 Unity 中创建动画。 一、准备工作 首先&#xff0c;确保您已经安装了最新版本的 Unity 引擎。创建一个新的 Unity 项目或者打开您现有的项目…...

2024年最全渗透测试学习指南,小白也能轻松hold住!零基础到精通,看完这篇就够了!

可能会有很多人觉得渗透测试门槛很高&#xff0c;学习周期长&#xff0c;似乎只有天赋异禀者方能涉足。实则不然&#xff0c;渗透测试行业虽有其专业门槛&#xff0c;但绝非如外界渲染的那样高不可攀。归根结底&#xff0c;所需的基础不过是扎实的编程语言功底&#xff0c;同时…...

有道云docx转换markdown,导入hugo发布到github page,多平台发布适配

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 有道云导出docx 有道云笔记右上角更多按钮选择【导出为Word】&#xff0c;可以导出docx文档 docx转换markdown 尝试了几个docx转markdown的python库后&…...

如何理解:进程控制

文章目录 前言&#xff1a;进程创建&#xff1a;进程终止&#xff1a;如何终止进程&#xff1f;进程等待非阻塞等待&#xff1a; 总结&#xff1a; 前言&#xff1a; ​ 对于前面的地址空间的学习&#xff0c;我们现在了解到原来所谓变量的地址其实是虚拟地址&#xff0c;该虚…...

工业互联网边缘计算实训室解决方案

一、引言 随着物联网&#xff08;IoT&#xff09;、5G通信技术的快速发展&#xff0c;工业互联网已成为推动制造业转型升级的重要力量。边缘计算作为云计算的延伸和补充&#xff0c;在实时数据分析、降低数据传输延迟、提升处理效率及增强数据安全性方面展现出巨大潜力。在此背…...

Android全面解析之Context机制(一) :初识Android context

什么是Context 回想一下最初学习Android开发的时候&#xff0c;第一用到context是什么时候&#xff1f;如果你跟我一样是通过郭霖的《第一行代码》来入门android&#xff0c;那么一般是Toast。Toast的常规用法是&#xff1a; Toast.makeText(this, "我是toast", To…...

气象百科——气象监测站的介绍

气象监测站是专门用于监测和记录大气环境状态及变化规律的设施。这些站点通过安装各种观测仪器&#xff0c;如温度传感器、湿度传感器、气压传感器、风速风向传感器、雨量传感器以及近年来兴起的雷达水位计等&#xff0c;全方位、多角度地收集大气中的温度、湿度、气压、风速风…...

学懂C++(三十):高级教程——深入解析 C++ Windows API 的多线程支持

引言 在现代应用程序中&#xff0c;多线程编程是实现高性能和高并发任务的关键手段。Windows 操作系统为开发者提供了一套强大的 API&#xff0c;用于创建和管理线程、同步任务&#xff0c;并优化线程性能。本文将深入探讨 C 中 Windows API 的多线程支持&#xff0c;详细介绍线…...

苹果笔记本电脑可以玩steam游戏吗 MacBook支持玩steam游戏吗 在Steam上玩黑神话悟空3A大作 苹果Mac怎么下载steam

游戏是生活的润滑剂&#xff0c;越来越多的用户开始关注Mac平台上可玩的游戏。幸运的是&#xff0c;Steam作为最大的数字发行平台之一&#xff0c;提供了大量适用于Mac操作系统的游戏。无论你是喜欢策略、冒险还是射击类游戏&#xff0c;都能在Steam上找到适合自己Mac设备玩耍的…...

海康摄像头(测温型)桌面客户端开发分享

分享一个自己开发的用于企业特殊场景下温度监控告警的一个桌面应用。 关键功能&#xff1a; 1.支持海康摄像头&#xff1b; 2.支持多路视频预览&#xff0c;多通道画面选择预览&#xff0c;支持视频画面回放与下载&#xff1b; 3.支持自动探测摄像头功能&#xff0c;若具备…...

骑行耳机哪个品牌性价比高?精选五大畅销骑行耳机推荐!

骨传导耳机凭借不入耳佩戴更舒适、健康等特定在短时间内迅速风靡骑行圈&#xff0c;其独特的设计不仅让骑行者在享受音乐的同时保持对周围环境的警觉&#xff0c;还因其非入耳式的佩戴方式&#xff0c;有效避免了长时间骑行对耳朵的压迫与不适。它不仅能够激发骑行时的激情与动…...

libcurl8.9.1 上传json

在postman中 PUT----》body----》raw----》json 结构体定义&#xff1a; #define MAX_ARRAY_SIZE 5*1024*1024struct SMART_DATA_CACHE {char* buf;long dwTotalLen;SMART_DATA_CACHE(){dwTotalLen 0;buf nullptr;while (!buf) {try {buf new char[MAX_ARRAY_SIZE];}c…...

什么是暗水印?企业暗水印如何实施?企业保护利器

“明察秋毫之末&#xff0c;而不见舆薪。” 此言道出了观察之细致入微&#xff0c;却也隐含了信息泄露之隐忧。 在今日之数字时代&#xff0c;信息如潮水般汹涌&#xff0c;而电脑屏幕作为信息展示的重要窗口&#xff0c;其安全性亦成为众人关注的焦点。 当谈及监控电脑屏幕以…...

Qt 系统相关 - 文件

目录 1. 文件概述 2. 输入输出设备类 3. 文件读写类 4. 文件和目录信息类 1. 文件概述 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。 Qt 提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操作&#x…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...