英文:
How to connect to Wifi network programatically on Android 10 and above?
问题
val ssid = "你的WiFi SSID"
val password = "你的WiFi密码"
val networkSSID = "\"$ssid\""
val networkPassword = "\"$password\""
val wifiConfiguration = WifiConfiguration()
wifiConfiguration.SSID = networkSSID
wifiConfiguration.preSharedKey = networkPassword
val networkId = wifiManager.addNetwork(wifiConfiguration)
wifiManager.disconnect()
wifiManager.enableNetwork(networkId, true)
wifiManager.reconnect()
Android 10及以上版本中发现此代码无效。我还尝试了https://github.com/ThanosFisherman/WifiUtils,但在Android 10及以上版本中也不起作用。请问有人能提供连接WiFi网络的建议吗?
英文:
val ssid = "Your WiFi SSID"
val password = "Your WiFi password"
val networkSSID = "\"$ssid\""
val networkPassword = "\"$password\""
val wifiConfiguration = WifiConfiguration()
wifiConfiguration.SSID = networkSSID
wifiConfiguration.preSharedKey = networkPassword
val networkId = wifiManager.addNetwork(wifiConfiguration)
wifiManager.disconnect()
wifiManager.enableNetwork(networkId, true)
wifiManager.reconnect()
Used this code but it is not working on Android 10 and above.Also followed https://github.com/ThanosFisherman/WifiUtils but which also not working on Android 10 and above. Can some one suggest how to connect to wifi network.
答案1
得分: 3
你可以尝试使用ConnectivityManager和NetworkCallbacks来执行此任务,代码如下所示:
@RequiresApi(Build.VERSION_CODES.Q)
fun connectToWiFi(pin: String, ssid: String) {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as
ConnectivityManager
val specifier = WifiNetworkSpecifier.Builder()
.setSsid(ssid)
.setWpa2Passphrase(pin)
.setSsidPattern(PatternMatcher(ssid, PatternMatcher.PATTERN_PREFIX))
.build()
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(specifier)
.build()
val networkCallback = object : NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
showToast(context, context.getString(R.string.connection_success))
}
override fun onUnavailable() {
super.onUnavailable()
showToast(context, context.getString(R.string.connection_fail))
}
override fun onLost(network: Network) {
super.onLost(network)
showToast(context, context.getString(R.string.out_of_range))
}
}
connectivityManager.requestNetwork(request, networkCallback)
}
请注意,这是一段Kotlin代码,用于连接到Wi-Fi网络并处理连接状态的回调。
英文:
You should try ConnectivityManager and NetworkCallbacks to do this task like this way:
@RequiresApi(Build.VERSION_CODES.Q)
fun connectToWiFi(pin: String, ssid:String) {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as
ConnectivityManager
val specifier = WifiNetworkSpecifier.Builder()
.setSsid(ssid)
.setWpa2Passphrase(pin)
.setSsidPattern(PatternMatcher(ssid, PatternMatcher.PATTERN_PREFIX))
.build()
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(specifier)
.build()
val networkCallback = object : NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
showToast(context,context.getString(R.string.connection_success))
}
override fun onUnavailable() {
super.onUnavailable()
showToast(context,context.getString(R.string.connection_fail))
}
override fun onLost(network: Network) {
super.onLost(network)
showToast(context,context.getString(R.string.out_of_range))
}
}
connectivityManager.requestNetwork(request, networkCallback)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论