WifiManager 통해 setWifiEnabled 이라는 메서드를 사용하여 WiFi On/Off 동작이 가능했었는데 Android 10 (API 29) 이상에서는 setWifiEnabled 를 더 이상 사용 할 수가 없게 되었습니다. 그 대안으로 ...

[안드로이드] WiFi OnOff (setWifiEnabled deprecated)

WifiManager 통해 setWifiEnabled 이라는 메서드를 사용하여 WiFi On/Off 동작이 가능했었는데

Android 10 (API 29) 이상에서는 setWifiEnabled 를 더 이상 사용 할 수가 없게 되었습니다.

그 대안으로 Setting Panel 을 통해 WiFi 제어하는 내용을 정리하려고 합니다.

 

 

 

 

 

 

1. setWifiEnabled deprecated

공식 문서에서 Android 10 (API 29) 이상에서는 setWifiEnabled 를 사용하여도 

결과는 항상 실패하고 반환 값으로 false 를 받는다고 확인 할 수 있었습니다.


 

그럼 이제 Wifi 설정을 제어는 못하는건가...? 라는 브레이크가 걸렸는데..

다행히도 setWifiEnabled deprecated 에 따른 대안으로 Setting Panel 을 어렵지 않게 찾을 수 있었습니다.

 

 

 

 

 

2. Setting Panel

Android 10 (API 29) 이상 setting panel 이라는 기능을 지원하고 있습니다.

세팅 패널은 호출 앱 위에 표시되어 사용자가 현재 화면을 떠나지 않고도 일부 설정을 할 수 있도록 도와줍니다.


세팅 패널의 종류는 아래와 같습니다.

 - ACTION_INTERNET_CONNECTIVITY : 인터넷 연결 관련 설정을 포함한 패널 호출

 - ACTION_NFC : NFC 관련 설정을 포함한 패널 호출

 - ACTION_VOLUME : 볼륨 관련 설정을 포함한 패널 호출

 - ACTION_WIFI : WiFi 설정을 포함한 패널 호출

 

 

 

 

 

3. WiFi On Off

Android 10 (API 29) 을 기준으로 동작을 나누어 아래와 같이 정의하여 사용 가능합니다.

fun wifiOnOff(activity: Activity, onOff: Boolean) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
// Android 10(API 29) 미만 : WifiManager setWifiEnabled
val wifiManager = activity.applicationContext.getSystemService(WIFI_SERVICE) as WifiManager
if (wifiManager.isWifiEnabled != onOff) {
@Suppress("DEPRECATION")
wifiManager.isWifiEnabled = onOff
}
} else {
// Android 10(API 29) 이상 : Setting Panel
showWiFiSettingPanel(activity)
}
}

@RequiresApi(Build.VERSION_CODES.Q)
fun showWiFiSettingPanel(activity: Activity) {
val panelIntent = Intent(Settings.Panel.ACTION_WIFI)
activity.startActivity(panelIntent)
}


WiFi 세팅 패널을 호출 했을 때 아래와 같이 하단에 설정 UI 가 띄워지는 걸 볼 수 있습니다. 





setWifiEnabled 와 다르게 사용자가 직접 제어 해야 한다는 번거로움이 있지만...

계속해서 보안이 강화되는 상황에서 이러한 제약은 불가피한 것으로 보입니다.

(혹시 Setting Panel 과 다른 대안이 있다면 댓글로 공유 부탁 드립니다!ㅠㅠ)



끝까지 읽어 주셔서 감사합니다 좋은 하루 되세요:)



 

 

 

[Reference] 

Android Developer - WifiManager

Android Developer - Setting Panel

 

 

 

 

 

0 comments: