반응형
반응형

음....

 

이번글에는 안드로이드에서 구현하기 귀찮은 부분을 편하게 구현시킨 라이브러리를 하나 공유!!!!

 

- 이름 : WifiUtils

- Github : https://github.com/ThanosFisherman/WifiUtils

 

GitHub - ThanosFisherman/WifiUtils: Easily Connect to WiFi Networks

Easily Connect to WiFi Networks. Contribute to ThanosFisherman/WifiUtils development by creating an account on GitHub.

github.com

 

와이파이 통신을 구현하기 위해서는 Wifimanager를 이용해서 구현을 해야 함

- 구글문서 : https://developer.android.com/reference/android/net/wifi/WifiManager

 

WifiManager  |  Android Developers

 

developer.android.com

 

진행 절차는 간단함

1. WIFI 동작가능한지 확인

2. WIFI Scan 시작

3. 신호 확인 후 접속

 

근데!! 

 

해보신 분들은 해당 부분 구현이 어렵다는 것을 알 것임 

 

그냥 Connect을 한다고 되는 것도 아니고 요즘은 특정 WiFi 에 접속하려면 WiFiSuggestion을 사용해야 한다.

- 참고 내용 : https://developer.android.com/reference/android/net/wifi/WifiNetworkSuggestion.Builder

 

WifiNetworkSuggestion.Builder  |  Android Developers

 

developer.android.com

 

Wi-Fi Suggestion 관련해서는 다음에 정리하도록 하겠음

 

오늘은 라이브러리를 사용하는 법을 알아볼 거니깐?!!

 

 

자!! 아무튼 저 귀찮은 작업을 한방에 없애는 방법이 WiFiUtils 라이브러리가 되시겠다

 

 

 

방법은 간단하다

 

1. 라이브러리 implemetation 

implementation("io.github.thanosfisherman.wifiutils:wifiutils:1.6.6")

2. WiFi 권한설정

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

3. WiFiUtils Log 설정

WifiUtils.enableLog(true);
WifiUtils.forwardLog(new Logger() {
    @Override
    public void log(int priority, String tag, String message) {
        Log.e(tag, message);
    }
});

4. WiFi 검색

WifiUtils.withContext(context).scanWifi(new ScanResultsListener() {
    @Override
    public void onScanResults(@NonNull List<ScanResult> scanResults) {
        if(scanResults.isEmpty()){
            Log.e("getScanResults", "SCAN RESULTS IT's EMPTY");
            WifiUtils.withContext(context).disableWifi();
            return;
        }

        for(ScanResult result : scanResults){
            if(result.SSID.equals("특정 SSID")){
                // 특정 SSID 신호가 검색됬음을 확인
                Log.e("getScanResults", "FIND ==> " + result);
                break;
            }
        }
    }
}).start();

5. WiFi 접속

WifiUtils.withContext(context)
.connectWith(SSID, BSSID, PASSWORD)
.setTimeout(40000)
.onConnectionResult(new ConnectionSuccessListener() {
    @Override
    public void success() {
        Log.d("WifiUtils_Connect", "Success!!");
    }

    @Override
    public void failed(@NonNull ConnectionErrorCode errorCode) {
        Log.e("WifiUtils_Connect", "Fail!!");
    }
}).start();

※ 여기서 BSSID 값이 뭔지 모르는 분들이 있을 거 같아 말씀드림.

    - BSSID(Basic Service Set Identifier) 는 네트워크 ID라고 생각하면 편하실 거다. 통상 MAC 주소라고 생각하면 됨

      그러면 이 주소값은 어떻게 읽어오냐?? 

      아주 편한 라이브러리라고 말씀드렸었다 ㅎㅎㅎ 

      Scan 결과물에 들어있으니 걱정 안 하셔도 괜찮음

      FIND 로그를 확인해 보면 BSSID 값이 있으니 걱정 마시라 

 

6. WiFi 접속해제

WifiUtils.withContext(context).disconnect(new DisconnectionSuccessListener() {
    @Override
    public void success() {
        WifiUtils.wifiLog("DISCONNECT Success!!");
    }

    @Override
    public void failed(@NonNull DisconnectionErrorCode errorCode) {
        WifiUtils.wifiLog("DISCONNECT Fail : " + errorCode);
    }
});

 

이 정도가 심플하게 사용하는 방법이다!! 

 

좀 더 사용하면서 느낀 점을 말하자면 Wi-Fi 접속을 바로 진행하기보다는 Scan 후 해당 SSID 가 확인 된다면 진행하는 것을 추천한다. 

 

질문은 댓글로 남겨주시면 응답하겠음!! 

 

오늘도 다들 즐코딩~!!

반응형

+ Recent posts