Flutter plugin 개발하기 - part3 Android 환경 세팅 (Kotlin) 및 개발하기
이야기를 하기에 앞서, 이 글은 네가지 파트로 나뉘어져 있습니다. 각 글을 나눈 기준은 제가 항상 Flutter로 개발하면서 작업을 나누는 단위입니다. 각 단위 내에서도 더 작게 쪼개지지만 플랫폼 관련 기능을 구현할 때는 Flutter -> iOS -> Android 순서로 작업합니다. (Android보다 iOS쪽이 제약이 많기 때문에 기능 확인차 이렇게 하고있습니다.)
privatefunconnectToWifi(call: MethodCall, result: MethodChannel.Result) { val argMap = call.arguments as Map val ssid = argMap["ssid"] as String val password = argMap["password"] as String?
// 비밀번호가 있냐 없냐에 따라 wifi configration을 설정한다. val wifiConfiguration = if (password == null) { WifiConfiguration().apply { SSID = wrapWithDoubleQuotes(ssid) status = WifiConfiguration.Status.CURRENT allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE) } } else { WifiConfiguration().apply { SSID = wrapWithDoubleQuotes(ssid) preSharedKey = wrapWithDoubleQuotes(password) status = WifiConfiguration.Status.CURRENT allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK) } }
val wifiManager = activityContext?.applicationContext?.getSystemService(Context.WIFI_SERVICE) as WifiManager
with(wifiManager) { if (!isWifiEnabled) { isWifiEnabled = true }
// 위에서 생성한 configration을 추가하고 해당 네트워크와 연결한다. addNetwork(wifiConfiguration) configuredNetworks.find { network -> network.SSID == wrapWithDoubleQuotes(ssid) }?.let { network -> disconnect() enableNetwork(network.networkId, true) reconnect() result.success(true) } ?: let { result.success(false) } } }
wifi 권한
Android에서 wifiManager를 통해 programming 적으로 wifi를 제어하기 위해서는 권한이 필요하다.
privatefunconnectToWifi(call: MethodCall, result: Result) { val argMap = call.arguments as Map val ssid = argMap["ssid"] as String val password = argMap["password"] as String?
// 비밀번호가 있냐 없냐에 따라 wifi configration을 설정한다. val wifiConfiguration = if (password == null) { WifiConfiguration().apply { SSID = wrapWithDoubleQuotes(ssid) status = WifiConfiguration.Status.CURRENT allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE) } } else { WifiConfiguration().apply { SSID = wrapWithDoubleQuotes(ssid) preSharedKey = wrapWithDoubleQuotes(password) status = WifiConfiguration.Status.CURRENT allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK) } }
val wifiManager = activityContext?.applicationContext?.getSystemService(Context.WIFI_SERVICE) as WifiManager
with(wifiManager) { if (!isWifiEnabled) { isWifiEnabled = true }
// 위에서 생성한 configration을 추가하고 해당 네트워크와 연결한다. addNetwork(wifiConfiguration) configuredNetworks.find { network -> network.SSID == wrapWithDoubleQuotes(ssid) }?.let { network -> disconnect() enableNetwork(network.networkId, true) reconnect() result.success(true) } ?: let { result.success(false) } }