经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android手机获取Mac地址的几种方法
来源:jb51  时间:2019/2/22 9:09:08  对本文有异议

最常用的方法,通过WiFiManager获取:

  1. /**
  2. * 通过WiFiManager获取mac地址
  3. * @param context
  4. * @return
  5. */
  6. private static String tryGetWifiMac(Context context) {
  7. WifiManager wm = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
  8. WifiInfo wi = wm.getConnectionInfo();
  9. if (wi == null || wi.getMacAddress() == null) {
  10. return null;
  11. }
  12. if ("02:00:00:00:00:00".equals(wi.getMacAddress().trim())) {
  13. return null;
  14. } else {
  15. return wi.getMacAddress().trim();
  16. }
  17. }

这个方法Android 7.0是获取不到的,返回的是null,其实是返回“02:00:00:00:00:00”

根据本地IP获取:

  1. /**
  2. * 根据IP地址获取MAC地址
  3. * @return
  4. */
  5. private static String getLocalMacAddressFromIp() {
  6. String strMacAddr = null;
  7. try {
  8. //获得IpD地址
  9. InetAddress ip = getLocalInetAddress();
  10. byte[] b = NetworkInterface.getByInetAddress(ip).getHardwareAddress();
  11. StringBuffer buffer = new StringBuffer();
  12. for (int i = 0; i < b.length; i++) {
  13. if (i != 0) {
  14. buffer.append(':');
  15. }
  16. String str = Integer.toHexString(b[i] & 0xFF);
  17. buffer.append(str.length() == 1 ? 0 + str : str);
  18. }
  19. strMacAddr = buffer.toString().toUpperCase();
  20. } catch (Exception e) {
  21. }
  22. return strMacAddr;
  23. }
  24. /**
  25. * 获取移动设备本地IP
  26. * @return
  27. */
  28. private static InetAddress getLocalInetAddress() {
  29. InetAddress ip = null;
  30. try {
  31. //列举
  32. Enumeration<NetworkInterface> en_netInterface = NetworkInterface.getNetworkInterfaces();
  33. while (en_netInterface.hasMoreElements()) {//是否还有元素
  34. NetworkInterface ni = (NetworkInterface) en_netInterface.nextElement();//得到下一个元素
  35. Enumeration<InetAddress> en_ip = ni.getInetAddresses();//得到一个ip地址的列举
  36. while (en_ip.hasMoreElements()) {
  37. ip = en_ip.nextElement();
  38. if (!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1)
  39. break;
  40. else
  41. ip = null;
  42. }
  43. if (ip != null) {
  44. break;
  45. }
  46. }
  47. } catch (SocketException e) {
  48. e.printStackTrace();
  49. }
  50. return ip;
  51. }

这个方法Android 7.0及其以下版本都可以获取到。

根据网络接口获取:

  1. /**
  2. * 通过网络接口取
  3. * @return
  4. */
  5. private static String getNewMac() {
  6. try {
  7. List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
  8. for (NetworkInterface nif : all) {
  9. if (!nif.getName().equalsIgnoreCase("wlan0")) continue;
  10. byte[] macBytes = nif.getHardwareAddress();
  11. if (macBytes == null) {
  12. return null;
  13. }
  14. StringBuilder res1 = new StringBuilder();
  15. for (byte b : macBytes) {
  16. res1.append(String.format("%02X:", b));
  17. }
  18. if (res1.length() > 0) {
  19. res1.deleteCharAt(res1.length() - 1);
  20. }
  21. return res1.toString();
  22. }
  23. } catch (Exception ex) {
  24. ex.printStackTrace();
  25. }
  26. return null;
  27. }

注意网络接口的Name有跟多:dummy0、p2p0、wlan0....其中wlan0就是我们需要WiFi mac地址。这个方法Android 7.0及其以下版本都可以获取到。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对w3xue的支持。如果你想了解更多相关内容请查看下面相关链接

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号