[안드로이드 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://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