투케이2K

899. (Android/Java) connectivityManager 사용해 NetworkRequest 특정 와이파이 연결 및 Handler 딜레이 설정 연결 해제 수행 본문

Android

899. (Android/Java) connectivityManager 사용해 NetworkRequest 특정 와이파이 연결 및 Handler 딜레이 설정 연결 해제 수행

투케이2K 2024. 11. 18. 20:24

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

 

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Java

- 개발 툴 : Android Studio

- 구분 : 간단 소스

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------


// --------------------------------------------
// TODO [전역 변수 선언]
// --------------------------------------------
ConnectivityManager connectivityManager = null;



// --------------------------------------------
// TODO [connectivityManager 객체 생성 및 와이파이 연결 수행]
// --------------------------------------------
// TODO [사전 와이파이 기능 활성 상태여야 합니다]
// --------------------------------------------
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {

    // [연결할 와이파이 정보 확인]
    String ssid = "TEST";
    String pw = "a0123456789";

    WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder()
            .setSsid(String.valueOf(ssid))
            .setWpa2Passphrase(String.valueOf(pw)) // TODO [WPA2 형식]
            .build();

    NetworkRequest networkRequest = new NetworkRequest.Builder()
            .removeTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) // [와이파이 사용 활성]
            .setNetworkSpecifier(wifiNetworkSpecifier)
            .build();

    connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    connectivityManager.requestNetwork(networkRequest, networkCallback); // TODO [네트워크 요청 , 응답 확인 콜백 지정]

}



// --------------------------------------------
// TODO [ConnectivityManager.NetworkCallback 네트워크 연결 콜백 응답 지정]
// --------------------------------------------
ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(Network network) { // TODO [연결 완료 및 소켓 통신 사용 가능]
        super.onAvailable(network);
        S_Log._W_(ACTIVITY_NAME + " :: requestNetwork :: onAvailable :: Wifi Connection Success", null);

        // TODO 특정 시간 이후 AP 제안 removeNetworkSuggestions 옵션 해제 설정
        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                S_Log._E_(ACTIVITY_NAME + " :: requestNetwork :: onAvailable :: 딜레이 설정 및 네트워크 연결 해제", null);

                try { connectivityManager.unregisterNetworkCallback(networkCallback); } catch (Exception e){ e.printStackTrace(); }

            }

        }, 10000);

    }

    @Override
    public void onUnavailable() { // TODO [네트워크에 연결되지 않은 경우]
        super.onUnavailable();
        S_Log._E_(ACTIVITY_NAME + " :: requestNetwork :: onUnavailable :: Wifi Connection Fail", null);

        // [콜백 해제] : [AP 연결 종료]
        try { connectivityManager.unregisterNetworkCallback(networkCallback); } catch (Exception e){ e.printStackTrace(); }

    }

    @Override
    public void onLost(Network network) { // TODO [네트워크 연결이 끊겨, 이용이 불가능]
        super.onLost(network);
        S_Log._E_(ACTIVITY_NAME + " :: requestNetwork :: onLost :: Wifi Connection Lost", null);

        // [콜백 해제] : [AP 연결 종료]
        try { connectivityManager.unregisterNetworkCallback(networkCallback); } catch (Exception e){ e.printStackTrace(); }

    }

};

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

https://blog.naver.com/kkh0977/223649794949

// --------------------------------------------------------------------------------------

 

반응형
Comments