Android

[안드로이드 10] targetSdkVersion29 와이파이를 활성화 또는 켜는 방법 setWifiEnabled() 사용할 수 없다.

안드로이드 앱 빌드시, compileSdkVersion 버전과 targetSdkVersion를 29 (Android 10, Build.VERSION_CODES.Q)로 설정하게되면 운영체제가 안드로이드 10이 설치된 휴대폰에서 와이파이를 프로그래밍 방식으로 직접 켜거나(활성화) 끌 수 없도록 제한이 걸렸다.

 

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"

    defaultConfig {
        applicationId "com.test"
        minSdkVersion 19
        targetSdkVersion 29
        versionCode 1
        versionName "1.0.1"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

구글은 왜 이렇게 개발자를 귀찮게 하는가!

구글은 왜 이렇게 개발자를 귀찮게 하는가!!

구글은 왜 이렇게 개발자를 귀찮게 하는가!!!

 

아래 코드들은 이제 안드로이드 Q버전부터는 쓸수 없는 코드가 되었다. 안드로이드 28 파이 버전까지만 사용가능하다.

    public void wifiDisable() {
        try{
            if(getSystemService(Context.WIFI_SERVICE) != null){
                ((WifiManager) getSystemService(Context.WIFI_SERVICE)).setWifiEnabled(false);
            }
        } catch (Exception e) {
        }
    }

    public void wifiEnable() {
        try{
            if(getSystemService(Context.WIFI_SERVICE) != null) {
                ((WifiManager) getSystemService(Context.WIFI_SERVICE)).setWifiEnabled(true);
            }
        } catch (Exception e) {
        }
    }

 

와이파이가 활성화 되어있는지 여부를 체크하는 로직은 예전 그대로 사용가능한다.

    public boolean getCurrentWIFI(){
        try {
            ConnectivityManager dataManager 
                = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetwork = dataManager.getActiveNetworkInfo();
            if (activeNetwork != null) { // connected to the internet
                if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) return true;
                else return false;
            }
            return false;
        }catch (Exception e){
            return false;
        }
    }

 

프로그래밍 방식으로 변경할 방법은 아직없다. 구글에서 대체 방법을 내놓을지 난무하다. 사용자에게  직접 요청하는 수밖에……….. 사용자가 변경할 수 있도록 Settings.Panel.ACTION_INTERNET_CONNECTIVITY 창을 호출해주는것으로 마무리한다. ACTION_INTERNET_CONNECTIVITY를 호출할 경우, 와이파이와 모바일데이터, 비행기 모드 3개를 끄거나 켤 수 있는 패널을 노출해준다. ACTION_WIFI를 호출할경우 와이파이만 끄거나 켤 수 있는 패널이 나타난다.

switch1 = view.findViewById(R.id.switch1); //와이파이
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { //29
    if(getCurrentWIFI()) switch1.setChecked(true);
    else  switch1.setChecked(false);
} else {
   witch1.setChecked(pref.isCusomWiFi());
}


switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
	@Override
	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { //29
			Intent panelIntent = new Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
			startActivityForResult(panelIntent, 999);
		} else {
			if (isChecked) switch1.setChecked(true);
			else switch1.setChecked(false);			
		}

	}
});


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent); 
        if(requestCode == 999) {
            if(switch1!=null) {
                if(getCurrentWIFI())  switch1.setChecked(false);
                else  switch1.setChecked(true);                 
            }
        }
    }

오늘은 여기까지…….앱 업데이트가 언제부인가 일이 되기 시작했다. 이제는 즐겁지가 않다. 귀찮아지고 있다. 

 

[참고]

https://stackoverflow.com/questions/58075918/is-it-possible-to-programmatically-enable-wifi-on-android-10-devices

 

[연관 글]

Wi-Fi 검색 개요 (개발자 문서)

https://developer.android.com/reference/android/net/wifi/WifiManager.html#ACTION_PICK_WIFI_NETWORK

https://developer.android.com/reference/android/provider/Settings.Panel.html#ACTION_INTERNET_CONNECTIVITY
https://stackoverflow.com/questions/3930990/android-how-to-enable-disable-wifi-or-internet-connection-programmatically/61289575

https://stackoverflow.com/questions/9871762/android-turning-on-wifi-programmatically

 

 

Leave a Reply

error: Content is protected !!