如何在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
相关产品推荐
相关产品推荐

