You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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))

注意事项

  1. 动态权限申请必须完成,否则API调用会失败。
  2. 对于开放网络(无密码),可使用setSsid(ssid)无需设置密码相关方法。
  3. Android 13+ 部分场景下可能需要额外的权限适配,需参考官方文档调整。

内容的提问来源于stack exchange,提问作者lakshmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:43:19