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: