You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Dart中如何获取设备真实MAC地址?已尝试多包无效

解决获取设备MAC地址返回02:00:00:00:00:00的问题

原因分析

  • Android 6.0(API Level 23)及以上版本,系统为隐私保护限制了APP获取真实WiFi MAC地址的权限,默认返回02:00:00:00:00:00作为占位符。
  • iOS从iOS 7开始,同样禁止APP直接获取设备真实MAC地址,会返回固定虚拟地址。
  • 你尝试的第三方包本质都是调用系统API,受限于系统权限限制,自然无法返回真实MAC。

可行解决方案

1. Android平台特殊场景处理

如果你的APP是系统级应用或持有特殊权限,可尝试读取系统文件获取:

import 'dart:io';

Future<String?> getAndroidMac() async {
  try {
    final macFile = File('/sys/class/net/wlan0/address');
    if (await macFile.exists()) {
      return (await macFile.readAsString()).trim();
    }
  } catch (e) {
    print('读取MAC失败: $e');
  }
  return null;
}

注意:Android 10及以上版本,普通第三方APP即便申请权限也无法读取该文件,仅系统签名应用可访问。

2. 跨平台替代方案(推荐)

既然无法获取真实MAC,建议用以下标识替代设备唯一识别:

  • Android ID:通过android_id包获取,设备重置前保持唯一。
  • 本地存储UUID:首次启动生成唯一UUID,存入SharedPreferences,后续复用作为设备标识。
  • IMEI(仅Android):需申请READ_PHONE_STATE权限,Android 10及以上需特殊权限才能获取。

3. iOS平台替代

iOS可使用identifierForVendor作为设备标识,同一开发者的APP在同一设备上值相同,卸载该开发者所有APP后会重置,可通过device_info_plus包获取。

总结

当前主流移动系统都对MAC地址获取做了严格隐私限制,普通第三方APP基本无法获取真实MAC,建议采用上述替代方案实现设备标识需求。

内容的提问来源于stack exchange,提问作者Abdallah Raies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:35:22