안녕하세요 라미의 안드로이드 개발강좌입니다.
이번 포스팅에서는 안드로이드의 wifi mac address를 가져오는 방법에 대해서 설명드리겠습니다.
#[1] 핵심 설명
wifi mac address는 각각의 디바이스마다 고유한 값이므로 서버와 협력할 때 어떤 디바이스에서 서버통신을 하는지 구분할 때 유용하게 쓰입니다.
일단 자바 소스코드는 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public static String getMACAddress(String interfaceName) { try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface intf : interfaces) { if (interfaceName != null) { if (!intf.getName().equalsIgnoreCase(interfaceName)) continue; } byte[] mac = intf.getHardwareAddress(); if (mac==null) return ""; StringBuilder buf = new StringBuilder(); for (int idx=0; idx<mac.length; idx++) buf.append(String.format("%02X:", mac[idx])); if (buf.length()>0) buf.deleteCharAt(buf.length()-1); return buf.toString(); } } catch (Exception ex) { } // for now eat exceptions return ""; } String macAddress = getMACAddress("wlan0"); | cs |
안드로이드 6.0 이상부터는 이전에 사용했던 wifi mac address 추출 소스코드로 wifi mac address를 가져올 수 없습니다.
그 대신 안드로이드의 /sys/class/net/wlan0/address 에 wifi 에 대한 mac address를 가져올 수 있습니다.
매개변수를 보시면 String interfaceName 이란 것이 있는데,
이 곳에 "wlan0" 라는 String 값을 넣으시면 안드로이드 디바이스의 wifi mac address를 추출하실 수 있습니다.
wlan0의 구체적인 개념은 저도 잘 모르지만, 안드로이드는 리눅스 기반으로 만들어져 있습니다.
그래서 리눅스의 개념 중 wlan0 라는 것이 있는데, wlan0은 무선 네트워크 인터페이스를 의미한다고 밑의 링크에서 설명하고 있습니다.
http://wns349.tistory.com/3
그리고 해당 소스코드를 사용하시려면 android manifest 에 2개의 퍼미션이 필요합니다.
1 2 | <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> | cs |
#[2] 추가설명
이전에 안드로이드의 wifi mac address를 가져오는 소스코드는 따로 있었습니다. 하지만 안드로이드 6.0부터 이전 소스코드로 가져오지 못하게 되었습니다.
그래서 위의 소스코드를 사용해야만 안드로이드의 모든 버전의 wifi mac address를 가져올 수 있습니다.
이전 소스코드는 밑의 링크에서 설명하고 있습니다.
http://gonacon.blogspot.kr/2016/05/android-wifi-mac.html
#P.S
안드로이드 개발실무를 2015년 1월부터 시작했습니다.
아직 부족한 점이 많으므로 내용 중 틀린 부분, 추가 설명이 필요한 부분이 있다면 언제든지 답변 부탁드리겠습니다.
답변 주시면 해당 내용을 수정해서 반영하겠습니다^^
#출처
// 6.0 이상에서도 wifi mac address를 가져오는 방법
http://jaehyun91.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-60%EC%97%90%EC%84%9C-%EB%94%94%EB%B0%94%EC%9D%B4%EC%8A%A4%EC%9D%98-%EB%A7%A5%EC%96%B4%EB%93%9C%EB%A0%88%EC%8A%A4-%EA%B0%80%EC%A0%B8%EC%98%A4%EB%8A%94-%EB%B0%A9%EB%B2%95
// 6.0 미만에서 wifi mac address를 가져오는 이전 방법
http://gonacon.blogspot.kr/2016/05/android-wifi-mac.html
// 리눅스의 network interface의 종류 중 wlan0에 대한 설명
http://wns349.tistory.com/3