Android获取物理地址(支持5.0~10.0)
获取物理地址的方法,支持Android 5.0~Android 10.0
public String getMacAddress() { List interfaces = null; try { interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface networkInterface : interfaces) { if (networkInterface != null && TextUtils.isEmpty(networkInterface.getName()) == false) { if ("wlan0".equalsIgnoreCase(networkInterface.getName())) { byte[] macBytes = networkInterface.getHardwareAddress(); if (macBytes != null && macBytes.length > 0) { StringBuilder str = new StringBuilder(); for (byte b : macBytes) { str.append(String.format("%02X:", b)); } if (str.length() > 0) { str.deleteCharAt(str.length() - 1); } return str.toString(); } } } } } catch (SocketException e) { e.printStackTrace(); } return "unknown";}
该方法需要请求网络权限:
Android 6.0之前获取物理地址的方法
public String getMacAddress(Context context) { if (context != null) { try { WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (wifi != null) { WifiInfo info = wifi.getConnectionInfo(); if (info != null) { return info.getMacAddress(); } } } catch (Exception e) { e.printStackTrace(); } } return "unknown";}
Android 6.0 开始,使用上述方法返回值总是 02:00:00:00:00:00。
Android 6.0 变更
为给用户提供更严格的数据保护,从此版本开始,对于使用 WLAN API 和 Bluetooth API 的应用,Android 移除了对设备本地硬件标识符的编程访问权。WifiInfo.getMacAddress() 方法和 BluetoothAdapter.getAddress() 方法现在会返回常量值 02:00:00:00:00:00。
现在,要通过蓝牙和 WLAN 扫描访问附近外部设备的硬件标识符,您的应用必须拥有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限。WifiManager.getScanResults() BluetoothDevice.ACTION_FOUNDBluetoothLeScanner.startScan()
Android 7.0 提供 DevicePolicyManager.getWifiMacAddress
Android 7.0 行为变更
设备所有者可以访问设备标识符。设备所有者可以使用 DevicePolicyManagewr.getWifiMacAddress()
访问设备的 WLAN MAC 地址。如果设备上从未启用 WLAN,则此方法将返回一个 null 值。
通过上述方法获取MAC地址需要申请设备管理者权限,如果应用本身用不到该权限,不推荐使用。
获取设备管理者权限的方法可参照下述链接:
设备管理
Android 10.0 随机分配 MAC 地址
Android 10 中的隐私权变更
默认情况下,在搭载 Android 10 或更高版本的设备上,系统会传输随机分配的 MAC 地址。
如果您的应用处理企业使用场景,平台会提供 API,用于执行与 MAC 地址相关的几个操作。
获取随机分配的 MAC 地址:设备所有者应用和资料所有者应用可以通过调用 getRandomizedMacAddress()
检索分配给特定网络的随机分配 MAC 地址。 获取实际的出厂 MAC 地址:设备所有者应用可以通过调用
getWifiMacAddress() 检索设备的实际硬件 MAC 地址。此方法对于跟踪设备队列非常有用。
更多相关文章
- Android Bluetooth 文件接收路径修改方法
- Android 获取手机的IMEI等设备信息
- Android中 Bitmap和Drawable相互转换的方法
- Android 处理 Button 单击事件的三种方法
- [Android Studio导入第三方类库方法] Error:(19, 23) 错误: 程序
- Android 中数据库查询方法query()中的selectionArgs的用法
- android客户端向服务器端验证登陆方法的实现2
- Unity-Android通信:AndroidJava 使用Unity c#编写Android程序调用
- Android stuio在MainActivity中运行java的main方法