Android 假网情况下对应的逻辑处理

本文探讨了Android设备在开启热点并关闭移动数据时,即使WiFi连接显示正常,但实际无法上网的问题。指出使用networkInfo.isAvailable()判断网络是否连接存在误差,因为该方法仅检查网络就绪状态。为解决这个问题,建议通过实现网络ping功能来验证是否能真正上网,从而确保更准确的网络状态判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过networkInfo.isAvailable()来判断网络是否连接,其实是不准确的,这个方法只能判断网络是否就绪,并不能判断网络是否真正连接。有一种情况,相对于Android手机 手机开热点,连接手机wifi,再断开手机数据,此时wifi连接并没有断开,只是并不能上网,此种假网情况发生时,isAvailable()仍会返回true。

解决思路:代码里请求网络,是否真正能上网,不停ping网络

解决办法:

public static final boolean isPing() {
    String result = null; // 为了看log日志,可不加
    try {
        String ip = "www.baidu.com"; // 百度网址
        Process p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + ip);
        InputStream input = p.getInputStream();
        BufferedReader in = new BufferedReader(new InputStreamReader(input));
        StringBuffer stringBuffer = new StringBuffer();
        String content = "";
        while ((content = in.readLine()) != null) {
            stringBuffer.append(content);
        }
        int status = p.waitFor();
        if (status == 0) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值