본문 바로가기
안드로이드

[Android] 안드로이드12 이상 Wifi 변경된 연결 방법

by 코딩히어로 2022. 9. 20.
728x90

1


Wifi를 연결하기 위해서 기존에는 WifiManager를 통해 리스트를 스캔해서 뿌려주었습니다

해당 스캔 방법은 이전 포스팅에서 확인하실 수 있습니다

2022.09.20 - [안드로이드] - [Android] Wifi 스캔하기

 

[Android] Wifi 스캔하기

기존 구글에 나와있는 Wifi 스캔 예제 소스들은 여러 가지 참조하여해 봤지만 모두 동작을 하지 않거나 스캔에서 fail이 발생했습니다 더 이상의 구글이나 다른 블로그 소스 참조가 무의미하여 And

codinghero.tistory.com

 

안드로이드 12로 OS가 업데이트되면서 기존에 Wifi 스캔을 통한 연결방법은 더 이상

시스템에서 동작하지 않게 되었으며 WifiManager를 통해 스캔 리스트를 가져와서

다시 또 리스트뷰에 넣고 하는 일련의 작업들이 전부 필요 없게 되었습니다

 

어떻게 보면 리스트뷰를 자기 입맛대로 디자인하고 싶은 개발자에게는 좋지 않은 소식이지만

전체 개발 양만 놓고 본다면 현재 변경된 방식이 훨씬 간편해졌습니다

 

변경된 방식은 intent를 통해서 Wifi Setting창을 열어주는 것인데 기존에 전화를 걸거나

할 때 App에서 못하고 intent를 통해 시스템에 요청하면 시스템이 요청을 처리해서

해당 페이지를 열어주는 방식과 동일합니다

 

그런데 기존에는 페이지 자체가 열리다 보니 App이 백그라운드로 전환되는 문제가 있었는데

Wifi Setting창은 Dialog 형태로 띄워주기 때문에 App 내부에서 동작하는 것처럼 구현이 됩니다

 

즉 이제부터는 App에서 Wifi 연결에 대한 부분은 신경 쓰지 않고 상관도 안 하는 대신

Dialog를 띄워서 사용자에게 직접 선택을 하도록 유도하게 되었습니다

 

기존 방식


WifiConfiguration wifiConfig = new WifiConfiguration();

wifiConfig.SSID = "\"" + SSID + "\"";
wifiConfig.preSharedKey = "\"" + PASS +"\"";

WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
int netId = wifiNanager.addNetwork(wifiConfig);
wifiNanager.disconnect();
wifiManager.enableNetwork(netId,true);
wifiNanager.reconnect();

기존 방식은 WifiConfiguration을 통해 연결할 Wifi 모듈의 정보를 구성하고

WifiManager를 통해 Network를 추가한 다음 기존 연결을 해제한 뒤에 설정한

네트워크로 다시 연결하도록 하는 방식이었습니다

 

변경된 방식


startActivity(new Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY));

위의 일련의 과정이 전부 필요 없이 연결이 필요한 곳에서 위 코드만 실행해주면 끝입니다

개발자 입장에서는 복잡한 설정 필요없이 Wifi연결 창을 Dialog로 호출하기 때문에

개발 소스가 현저하게 줄어들게 되었습니다

 

해당 코드를 통해 현재 연결된 Wifi가 IOTDEV가 아니라면 안내문구를 띄우는 예제를 만들어 보겠습니다

mainBinding.wifiSet.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        startActivity(new Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY));
    }
});
manager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);

mainBinding.settingBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        WifiInfo info = manager.getConnectionInfo();

        if(info.getSSID().contains("IOTDEV")) {
            //실행할 소스코드
        }else{
            Toast.makeText(getApplicationContext(),"먼저 WIFI를 IOT Device와 연결해주세요",Toast.LENGTH_SHORT).show();
        }
    }
});

WifiInfo를 통해 현재 연결된 Wifi가 무엇인지 확인하고

연결할 Wifi 디바이스인 IOTDEV가 아니면 안내문구를 띄워줍니다

만약 현재 연결된 Wifi가 IOTDEV이면 다음 코드를 실행합니다

728x90
반응형

댓글