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

如何在Android中可靠检测网络连接?AVD测试异常排查

问题排查:网络检测始终显示联网(AVD环境)

代码层面的疏漏

1. 废弃API的兼容性问题

你当前使用的getActiveNetworkInfo()方法在Android 10(API 29)及以上已被废弃,且在部分系统版本中返回的状态可能不准确,尤其是当设备存在虚拟网络连接时。

2. 权限缺失

确保你的AndroidManifest.xml中已添加网络状态访问权限,否则无法正确获取网络信息:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

3. 状态判断逻辑局限性

isConnectedOrConnecting()会将"正在连接中"的状态判定为联网,而AVD的网络状态切换可能存在延迟,导致该状态持续被返回。

改进后的网络检测代码

使用适配高版本系统的API替代废弃方法,确保状态判断准确:

public class NetworkHelper {
    private static final String TAG = "NetworkHelper";

    public static boolean isDeviceConnectedToNetwork(Context context) {
        if (context == null) return false;
        
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm == null) return false;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // Android 6.0及以上版本逻辑
            Network activeNetwork = cm.getActiveNetwork();
            if (activeNetwork == null) return false;
            
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(activeNetwork);
            return capabilities != null && (
                capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
                || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)
            );
        } else {
            // 旧版本兼容逻辑
            NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
            return activeNetworkInfo != null && activeNetworkInfo.isConnected();
        }
    }
}

AVD环境的潜在问题

1. 虚拟网络状态缓存

AVD的网络状态切换可能存在缓存,关闭WiFi后系统可能仍保留之前的连接状态。可以尝试:

  • 开启飞行模式后再关闭,强制刷新网络状态
  • 直接重启AVD

2. 虚拟移动数据未关闭

部分AVD默认启用虚拟移动数据,仅关闭WiFi后设备仍会通过移动数据判定为联网。进入AVD的系统设置,同时关闭WiFi和移动数据后再测试。

额外优化:避免内存泄漏

在Fragment的onDestroyView方法中移除定时任务,防止内存泄漏:

@Override
public void onDestroyView() {
    super.onDestroyView();
    if (networkCheckerHandler != null) {
        networkCheckerHandler.removeCallbacks(networkCheckerRunnable);
    }
    if (networkCheckerThread != null) {
        networkCheckerThread.quitSafely();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:31:16