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
相关产品推荐
相关产品推荐

