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

如何在Android平台通过Flutter获取局域网设备的MAC地址?

Android 13 获取MAC地址的可行方案

以下是当前在Android 13上能实现MAC地址获取的几种可行方案,适配系统权限限制:

  • 蓝牙MAC地址获取
    Android 13并未限制蓝牙MAC地址的获取,只要应用持有对应权限即可实现。需要申请BLUETOOTH(Android 11及以下)或BLUETOOTH_CONNECT(Android 12+)权限,且用户需开启蓝牙功能。代码示例:

    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (bluetoothAdapter != null && bluetoothAdapter.isEnabled()) {
        String bluetoothMac = bluetoothAdapter.getAddress();
    }
    
  • Wi-Fi P2P接口获取
    通过Wi-Fi P2P的设备信息接口可以获取MAC地址,需要申请ACCESS_FINE_LOCATION、CHANGE_WIFI_STATE和ACCESS_WIFI_STATE权限,同时需开启Wi-Fi P2P功能。代码示例:

    WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
    WifiP2pManager.Channel channel = manager.initialize(this, getMainLooper(), null);
    manager.requestDeviceInfo(channel, new WifiP2pManager.DeviceInfoListener() {
        @Override
        public void onDeviceInfoAvailable(WifiP2pDevice device) {
            String p2pMacAddress = device.deviceAddress;
        }
    });
    

    注意:部分设备可能存在兼容性差异,需做适配测试。

  • Root设备读取系统文件
    仅适用于已Root的设备,可直接读取系统文件/sys/class/net/wlan0/address获取Wi-Fi MAC地址,但该方式违反Google Play安全规范,可能导致应用被下架,不推荐用于上架应用。代码示例:

    try (BufferedReader reader = new BufferedReader(new FileReader("/sys/class/net/wlan0/address"))) {
        String wifiMac = reader.readLine().trim();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  • 替代方案:设备唯一标识符
    如果业务仅需设备唯一标识,建议使用官方推荐的Settings.Secure.ANDROID_ID或Firebase Instance ID,无需依赖MAC地址,更符合系统权限要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:01:55