android - 如何检查移动数据是否实际处于 Activity 状态或 wifi 是否实际连接到任何热点?

标签 android android-manifest android-internet

我正在尝试检查是否存在互联网连接或设备是否实际连接到 wifi。

注意:我并不是要查看是否有互联网连接或是否仅连接了 wifi。我想检查设备是否真的在接收和发送数据包。

此代码 fragment 实际上检查是否存在移动数据连接或 wifi 是否已启用,但并未说明连接是否实际建立。

public boolean isNetworkConnected(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo ni = cm.getActiveNetworkInfo();            
        if (ni == null) {
            // There are no active networks.
            Toast.makeText(context, "No Network", Toast.LENGTH_LONG).show();
            return false;
        } else
            return true;

    boolean isConnected = ni != null && ni.isConnectedOrConnecting();

    if(isConnected){

        return true;

    }
    else{
        Toast.makeText(context, "No Network", Toast.LENGTH_LONG).show();
        return false;
    }
}

public boolean haveNetworkConnection(Context context) {
        boolean haveConnectedWifi = false;
        boolean haveConnectedMobile = false;

        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();
        for (NetworkInfo ni : netInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                if (ni.isConnected())
                    haveConnectedWifi = true;
            if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                if (ni.isConnected())
                    haveConnectedMobile = true;
        }
        return haveConnectedWifi || haveConnectedMobile;
    }

以上所有代码 fragment 仅检查 wifi 或数据是否已启用。它不显示连接是否已建立。如果启用了 wifi 或数据,它将始终返回 true。

再次,我的目标是检查是否已建立连接。

任何帮助都会非常有帮助..提前致谢..:)

此问题已得到解答。再次感谢。

最佳答案

感谢大家的评论和回答,但我认为这个解决方案对我有用。这实际上是尝试连接到互联网并检查状态。不确定这是否是正确的方法。

public Boolean isOnline() {
        try {
            Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
            int returnVal = p1.waitFor();
            boolean reachable = (returnVal==0);
            if(reachable){
                System.out.println("Internet access");
                return reachable;
            }
            else{
                System.out.println("No Internet access");
            }

        } catch (Exception e) {

            e.printStackTrace();
        }
        return false;
    }

希望这对其他观众有帮助。

关于android - 如何检查移动数据是否实际处于 Activity 状态或 wifi 是否实际连接到任何热点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23156472/

相关文章:

android - 如何在 Android 中打开和关闭 3G

Android BLE - 确定特征的存储值类型

android - 为服务指定 SEND(共享) Intent 过滤器

android - 如何正确地动态检查android权限

java - 让我的应用程序在启动完成开/关时启动

java - 如何以编程方式忘记android中的无线网络?

android - 如何等待 IntentService 完成其任务

android - 在哪里关闭光标?

java - android Horizo​​ntalScrollView 中左右滚动的按钮

Android:保存屏幕状态(初学者)