Android 10及以上系统如何通过代码连接WiFi网络?
Android 10+ WiFi 连接可行方案
Android 10(API 29)及以上系统对WiFi连接的权限和API做了限制,传统的WifiConfiguration方式已无法直接生效,以下是两种可行的实现方案:
方案一:临时连接WiFi(不保存到系统列表)
适用于仅需一次性连接特定WiFi的场景,连接后不会将该WiFi存入系统已保存网络列表。
所需权限
在AndroidManifest.xml中声明:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- Android 12+ 额外需要 --> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" />
注意:位置权限和NEARBY_WIFI_DEVICES权限需要动态申请。
代码实现
val ssid = "Your WiFi SSID" val password = "Your WiFi password" val wifiNetworkSpecifier = WifiNetworkSpecifier.Builder() .setSsid(ssid) .setWpa2Passphrase(password) // 如果是WPA3,用setWpa3Passphrase .build() val networkRequest = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .setNetworkSpecifier(wifiNetworkSpecifier) .build() val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val networkCallback = object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { // 连接成功,可在此处理后续逻辑 connectivityManager.bindProcessToNetwork(network) } override fun onUnavailable() { // 连接失败 } } connectivityManager.requestNetwork(networkRequest, networkCallback) // 取消连接时调用 // connectivityManager.unregisterNetworkCallback(networkCallback)
方案二:添加WiFi到系统建议列表(可保存)
适用于需要将WiFi保存到系统已保存网络的场景,系统会向用户弹出确认提示,用户同意后自动连接并保存。
所需权限
同方案一,需声明并动态申请对应权限。
代码实现
val ssid = "Your WiFi SSID" val password = "Your WiFi password" val wifiSuggestion = WifiSuggestion.Builder() .setSsid(ssid) .setWpa2Passphrase(password) // WPA3用setWpa3Passphrase .setIsAppInteractionRequired(true) // 标记是应用发起的请求 .build() val wifiManager = getSystemService(Context.WIFI_SERVICE) as WifiManager val status = wifiManager.addNetworkSuggestions(listOf(wifiSuggestion)) if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // 建议添加成功,系统会弹出提示让用户确认 } // 监听用户操作回调,需要注册广播接收器 // 注册示例(在Activity中): val intentFilter = IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION) registerReceiver(object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { val success = intent?.getBooleanExtra(WifiManager.EXTRA_WIFI_NETWORK_SUGGESTION_RESULT, false) if (success == true) { // 用户同意并连接成功 } else { // 用户拒绝或连接失败 } } }, intentFilter) // 不再需要建议时,调用移除 // wifiManager.removeNetworkSuggestions(listOf(wifiSuggestion))
注意事项
- 动态权限申请必须完成,否则API调用会失败。
- 对于开放网络(无密码),可使用
setSsid(ssid)无需设置密码相关方法。 - Android 13+ 部分场景下可能需要额外的权限适配,需参考官方文档调整。
内容的提问来源于stack exchange,提问作者lakshmi
相关产品推荐
相关产品推荐

