news 2026/5/31 17:31:16

DM入库(11):getMAC() getRouterMac() getBluetoothMac()这三个获取的是不用的mac地址么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DM入库(11):getMAC() getRouterMac() getBluetoothMac()这三个获取的是不用的mac地址么?

是的,这三个获取的是完全不同的 MAC 地址。它们分别代表了不同的硬件对象和用途。

在 Android 14 系统应用(System App)的语境下,它们的区别如下:

1. getMAC() —— 本机 Wi-Fi MAC 地址

  • 主体你这台手机(或设备)的 Wi-Fi 网卡。

  • 用途:作为设备的唯一物理标识(类似于身份证)。在 DM 系统中,如果设备没有 IMEI(如平板、电视),通常用 Wi-Fi MAC 作为唯一 ID。

  • 值示例:A1:B2:C3:D4:E5:F6

  • 获取难度:高。Android 14 默认返回 02:00:00:00:00:00。系统应用需要通过遍历 NetworkInterface (wlan0) 来获取真实值。

2. getRouterMac() —— 连接的路由器 MAC (BSSID)

  • 主体你连接的那个路由器(比如小米路由器、TP-Link)。

  • 学名BSSID

  • 用途:用于辅助定位。知道连接了哪个路由器,就能大致推算出设备的地理位置。

  • 值示例:88:99:AA:BB:CC:DD (这是路由器的地址,不是你手机的)。

  • 获取难度:中。必须连接上 Wi-Fi,且必须授予定位权限 (ACCESS_FINE_LOCATION)才能获取,否则返回 02:00:00...。

3. getBluetoothMac() —— 本机蓝牙 MAC 地址

  • 主体你这台手机的蓝牙芯片。

  • 用途:用于蓝牙配对和识别。

  • 值示例:A1:B2:C3:D4:E5:F7。

    • 注意: 同一台手机的蓝牙 MACWi-Fi MAC通常非常像,往往只有最后一位不同(例如 Wi-Fi 是 F6,蓝牙是 F7),因为它们通常集成在同一个芯片上。

  • 获取难度:极高。Android 10 以后,官方 API 几乎封死了获取本机蓝牙 MAC 的途径,即使是系统应用也很难拿到真实的,通常返回空或者默认值。


总结对比表

方法名代表的硬件归属权典型用途在你的代码中对应
getMac()手机 Wi-Fi 芯片本机设备唯一标识NetworkInterface.getByName("wlan0")
getRouterMac()路由器发射端外部设备地理定位wifiInfo.getBSSID()
getBluetoothMac()手机蓝牙芯片本机蓝牙功能BluetoothAdapter.getAddress() (很难获取)

针对 ParamsUtils 的代码实现建议

在你的 ParamsUtils 中,这三个方法的实现逻辑应该是完全分开的:

code Java

downloadcontent_copy

expand_less

/** * 1. 获取本机 Wi-Fi MAC (wlan0) */ public static String getMac() { try { // 通过网络接口读取,只有 System App 或 Root 才有机会读到真实的 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 b : macBytes) { res1.append(String.format("%02X:", b)); } if (res1.length() > 0) res1.deleteCharAt(res1.length() - 1); return res1.toString(); } } catch (Exception ex) { } return "02:00:00:00:00:00"; } /** * 2. 获取路由器 MAC (BSSID) * 必须有 ACCESS_FINE_LOCATION 权限 */ public static String getRouterMac(Context context) { try { WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifiManager.getConnectionInfo(); // 需要检查定位权限 return info.getBSSID(); } catch (Exception e) { return "00:00:00:00:00:00"; } } /** * 3. 获取本机蓝牙 MAC */ public static String getBluetoothMac() { // Android 14 很难获取真实蓝牙地址,通常返回空或模拟值 // 除非你有厂商的私有 API return ""; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 0:17:00

Anaconda配置文件.bashrc修改:Miniconda-Python3.9自动完成

Miniconda-Python3.9 环境自动化配置&#xff1a;从 .bashrc 到可复现开发流程 在数据科学、机器学习和 AI 工程实践中&#xff0c;一个干净、稳定且高度可复现的 Python 开发环境&#xff0c;往往比代码本身更早决定项目的成败。你是否曾遇到过这样的场景&#xff1a;同事发来…

作者头像 李华
网站建设 2026/5/31 16:42:56

(LU)CPP条件位置偏爱系统 什么是CPP条件位置偏爱系统

条件性位置偏爱实验是评价药物精神依赖性的经典模型&#xff0c;同时也是筛选抗觅药行为干预手段的重要工具。该实验采用具备黑白灰三区结构的条件性位置偏爱箱&#xff0c;三区之间以小门连通&#xff0c;供实验动物&#xff08;大鼠、小鼠&#xff09;自由穿梭。实验操作时&a…

作者头像 李华
网站建设 2026/5/27 14:25:57

JAVA自助KTV预约源码:线上畅选,轻松开唱

以下是一个基于Java技术的自助KTV预约系统源码方案&#xff0c;该方案支持线上畅选包厢、灵活预约时段&#xff0c;并实现轻松开唱的完整流程&#xff0c;核心功能与技术实现如下&#xff1a;一、系统架构微服务拆分&#xff1a;采用Spring Cloud框架&#xff0c;将系统拆分为用…

作者头像 李华
网站建设 2026/5/25 19:00:00

收藏备用!一文讲透AI大模型并行训练:DP、PP、TP、EP全解析

对于刚入门大模型的开发者或程序员来说&#xff0c;“如何高效训练千亿、万亿参数模型”是绕不开的核心问题。而这背后的关键支撑&#xff0c;正是并行计算架构——它能让成千上万块GPU协同工作&#xff0c;把原本需要数月的训练任务压缩到几天甚至几小时完成。 在大模型训练与…

作者头像 李华
网站建设 2026/5/31 15:45:39

Miniconda-Python3.9镜像发布:专为PyTorch和TensorFlow优化的GPU开发环境

Miniconda-Python3.9镜像发布&#xff1a;专为PyTorch和TensorFlow优化的GPU开发环境 在深度学习项目日益复杂的今天&#xff0c;你是否曾因为“这个代码在我机器上明明能跑”而陷入无尽的调试&#xff1f;是否为了配置CUDA版本、解决依赖冲突而耗费一整天时间&#xff1f;这些…

作者头像 李华
网站建设 2026/5/23 0:15:30

Pyenv+Miniconda组合拳:Python3.9环境下多版本共存新思路

Pyenv Miniconda 组合拳&#xff1a;Python 多版本共存与环境隔离的现代实践 在如今 AI 项目层出不穷、数据科学团队协作日益紧密的开发环境下&#xff0c;一个看似简单却频频让人抓狂的问题反复出现&#xff1a;为什么我的代码在同事机器上跑不通&#xff1f; 明明 requireme…

作者头像 李华