본문 바로가기
Study/Android

AP(Wifi)검색 및 특정 AP(WiFi)에 접속하는 방법

by Answer Choi 2018. 2. 9.
반응형


현재 주변의 AP를 검색하는 코드입니다.


1
2
3
4
5
6
7
8
WifiManager wifiManager;
wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
List<ScanResult> sr =  wifiManager.getScanResults();    
    wifi_list=new String[sr.size()];
    Log.e("ssid","size="+sr.size());
    for(ScanResult r : sr){
        Log.e("ssid",r.toString());
    }    
cs


주변의 AP를 검색하기 위해서는 WifiManager를 이용합니다.


Line 3 : 리스트에 wifimanager를 통해 검색한 ap리스트가 저장됩니다.


Line 4 : 검색된 ap개수를 알 수 있습니다.


Line 6~8 : AP리스트를 보여줍니다.


AP에 접속하는 코드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
private void connect_ap(String ssid) {
    String key="key";
    String network="open or wpa or wep";    
    try{        
        WifiConfiguration wifiConfig = new WifiConfiguration();
        wifiConfig.SSID = "\"" + ssid + "\"";
        wifiConfig.status = WifiConfiguration.Status.DISABLED;
        wifiConfig.priority = 40;
        if (network.contains("open")) {
            wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
            wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
            wifiConfig.allowedAuthAlgorithms.clear();
            wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
            wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        } else if (network.contains("wpa")) {
            wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
            wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
            wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
            wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
            wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            wifiConfig.preSharedKey = "\"".concat(key).concat("\"");
        } else if (network.contains("wep")) {
            wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
            wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
            wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
            wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
            wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
            wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
            wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
             wifiConfig.wepKeys[0= "\"".concat(key).concat("\"");
            wifiConfig.wepTxKeyIndex = 0;
        }
        int id=wifiManager.addNetwork(wifiConfig);
        if(wifiManager.getWifiState()!=WifiManager.WIFI_STATE_ENABLED)
            wifiManager.setWifiEnabled(true);
        List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
        for( WifiConfiguration i : list ) {
            if(i.SSID != null && i.SSID.equals("\"" + ssid + "\"")) {
                wifiManager.disconnect();
                wifiManager.enableNetwork(i.networkId, true);
                wifiManager.reconnect();
                break;
            }
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}
cs


Line 2~3 : AP의 방식을 선택하고, AP의 key를 적어줍니다.


key를 이전코드에서 받아와도 됩니다.


Line 5~8 : AP에 대한 공통 설정입니다.


Line 9~19 : AP의 key가 open일때의 설정입니다.


Line 20~20 : AP의 key가 wpa일때의 설정입니다.


Line 31~42 : AP의 key가 wep일때의 설정입니다.


Line 44 : 설정이 완료된 AP의 정보를 추가해 줍니다.


Line 45~46 : 현재 wifi가 켜져있지 않다면 켜줍니다.


Line 47~54 : 선택한 AP를 등록된 AP리스트에서 검색하여 접속합니다.

반응형

인기글