본문 바로가기

안드로이드 개발

안드로이드 wifi mac address 가져오기(6.0 이상도 호환)

안녕하세요 라미의 안드로이드 개발강좌입니다.


이번 포스팅에서는 안드로이드의 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==nullreturn "";
                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