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

Android 13提示WiFi连接成功但实际无法联网问题求助

解决WiFi连接成功但无法访问互联网的问题

你的代码已经成功让设备关联到目标WiFi,但应用没有自动使用这个网络,所以导致无法上网。以下是具体解决步骤:

1. 绑定进程到可用网络

在NetworkCallback的onAvailable回调中,将当前应用进程绑定到该网络,这样应用的网络请求会走这个WiFi:

val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: android.net.Network) {
        Log.d(TAG, "Network available")
        // 绑定当前进程到该WiFi网络
        connectivityManager.bindProcessToNetwork(network)
        // 可选:验证网络连通性
        testNetwork(network)
    }

    override fun onLost(network: android.net.Network) {
        Log.d(TAG, "Network lost")
        // 网络断开时解绑
        connectivityManager.bindProcessToNetwork(null)
    }
}

2. 确保权限齐全

在AndroidManifest.xml中添加必要权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

注意:Android 6.0+需要动态申请ACCESS_FINE_LOCATION权限,否则无法扫描和连接WiFi。

3. 验证网络连通性

添加一个简单的网络测试方法,确认绑定后网络是否可用:

private fun testNetwork(network: Network) {
    Thread {
        try {
            val url = URL("https://www.baidu.com")
            // 使用指定网络发起请求
            val conn = network.openConnection(url) as HttpURLConnection
            conn.connectTimeout = 5000
            conn.connect()
            
            if (conn.responseCode == HttpURLConnection.HTTP_OK) {
                Log.d(TAG, "网络可正常访问")
            } else {
                Log.d(TAG, "网络访问失败,响应码:${conn.responseCode}")
            }
            conn.disconnect()
        } catch (e: Exception) {
            Log.e(TAG, "网络测试出错", e)
        }
    }.start()
}

4. 排查外部因素

如果绑定后仍无法上网,检查:

  • WiFi密码是否正确(系统提示连接成功不代表密码绝对正确)
  • 路由器是否正常联网(用其他设备测试该WiFi能否上网)
  • 路由器是否开启了MAC过滤、IP限制等功能

额外提示

  • 若想确保请求的网络具备上网能力,可以在NetworkRequest.Builder中添加网络能力要求:
val request: NetworkRequest = NetworkRequest.Builder()
    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) // 要求网络能上网
    .setNetworkSpecifier(specifier)
    .build()
  • Android 10及以上,bindProcessToNetwork无需额外系统权限,普通应用可正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:30:19