MacUtil.kt 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package com.framework.app.tools
  2. import android.Manifest
  3. import android.annotation.SuppressLint
  4. import android.content.Context
  5. import android.content.pm.PackageManager
  6. import android.net.wifi.WifiManager
  7. import android.os.Build
  8. import android.text.TextUtils
  9. import androidx.core.content.ContextCompat
  10. import com.framework.app.tools.MacUtil
  11. import java.lang.StringBuilder
  12. import java.net.NetworkInterface
  13. import java.net.SocketException
  14. /**
  15. * Created by weimo on 2020/7/13.
  16. */
  17. object MacUtil {
  18. @SuppressLint("HardwareIds")
  19. fun getMacAddress(context: Context): String? {
  20. if (Build.VERSION.SDK_INT >= 23) {
  21. val str = getMacMoreThanM(context)
  22. if (!TextUtils.isEmpty(str)) {
  23. return str
  24. }
  25. } else {
  26. if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_WIFI_STATE)
  27. == PackageManager.PERMISSION_GRANTED
  28. ) {
  29. val wifiManager = context.applicationContext
  30. .getSystemService(Context.WIFI_SERVICE) as WifiManager
  31. if (null != wifiManager) {
  32. return wifiManager.connectionInfo.macAddress
  33. }
  34. }
  35. }
  36. return null
  37. }
  38. /**
  39. * android 6.0+获取wifi的mac地址
  40. * @param paramContext
  41. * @return
  42. */
  43. private fun getMacMoreThanM(paramContext: Context): String? {
  44. try {
  45. //获取本机器所有的网络接口
  46. val enumeration = NetworkInterface.getNetworkInterfaces()
  47. while (enumeration.hasMoreElements()) {
  48. val networkInterface = enumeration.nextElement()
  49. //获取硬件地址,一般是MAC
  50. val arrayOfByte = networkInterface.hardwareAddress
  51. if (arrayOfByte == null || arrayOfByte.size == 0) {
  52. continue
  53. }
  54. val stringBuilder = StringBuilder()
  55. for (b in arrayOfByte) {
  56. //格式化为:两位十六进制加冒号的格式,若是不足两位,补0
  57. stringBuilder.append(
  58. String.format(
  59. "%02X:",
  60. *arrayOf<Any>(java.lang.Byte.valueOf(b))
  61. )
  62. )
  63. }
  64. if (stringBuilder.length > 0) {
  65. //删除后面多余的冒号
  66. stringBuilder.deleteCharAt(stringBuilder.length - 1)
  67. }
  68. val str = stringBuilder.toString()
  69. // wlan0:无线网卡 eth0:以太网卡
  70. if (networkInterface.name == "wlan0") {
  71. return str
  72. }
  73. }
  74. } catch (socketException: SocketException) {
  75. return null
  76. }
  77. return null
  78. }
  79. }