相关疑难解决方法(0)

是否可以在Android Q上添加网络配置?

背景

我注意到,在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)

android wifimanager android-wifi android-10.0

6
推荐指数
3
解决办法
822
查看次数

标签 统计

android ×1

android-10.0 ×1

android-wifi ×1

wifimanager ×1