我注意到,在WifiManager类中有一个名为addNetwork的函数,如果我想恢复或保存网络信息(网络名称AKA SSID以及密码和类型),该功能可能很有用,以便我也可以连接到它。
我找不到有关如何执行此操作的太多信息。我在StackOverflow上看到了各种示例,并且如果我以Android API 28(或更低版本)为目标,那么我确实成功地使它添加了网络,甚至连接到它。
但是,以Android 29(Android Q)为目标时,它无法添加网络。
由于我正在尝试使用Android Q beta 4的Pixel 2,我认为可能是因为addNetwork已弃用,所以文档甚至说了这一点,并且如果我定位到Android Q,它将无法正常工作,并且确实无法使用工作:
兼容性说明:对于面向Build.VERSION_CODES.Q或更高版本的应用程序,此API始终返回-1。
通过准备WifiConfiguration和添加,看来它应该可以运行到Android Q(不包括)的方式。以后,我也可以根据需要连接到它。在Android Q上,它似乎已由WifiNetworkSuggestion取代,但似乎根本就不是在添加网络:
网络建议对象用于提供Wi-Fi网络,以便在自动连接到网络时进行考虑。应用无法直接创建此对象,它们必须使用WifiNetworkSuggestion.Builder#build()来获取此对象的实例。
应用可以使用WifiManager#addNetworkSuggestions(List)向平台提供此类网络的列表。
这是我当前的代码,适用于Android-Q之前的版本
@WorkerThread
fun addNetwork(context: Context, networkName: String, networkPassword: String? = null, keyMgmt: Int = WifiConfiguration.KeyMgmt.NONE) {
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
val conf = WifiConfiguration()
conf.SSID = "\"$networkName\""
conf.preSharedKey = if (networkPassword.isNullOrEmpty()) "" else "\"$networkPassword\""
conf.allowedKeyManagement.set(keyMgmt)
when (keyMgmt) {
WifiConfiguration.KeyMgmt.WPA_PSK -> {
//WPA/WPA2
}
WifiConfiguration.KeyMgmt.IEEE8021X -> …Run Code Online (Sandbox Code Playgroud)