3

インターネット接続があるかどうか、またはデバイスが実際に Wi-Fi に接続されているかどうかを確認しようとしています。

注:インターネット接続があるかどうか、またはwifiだけが接続されているかどうかを確認しようとしているわけではありません. デバイスが実際にパケットを送受信しているかどうかを確認したい。

このコード スニペットは、モバイル データ接続があるかどうか、または Wi-Fi が有効になっているかどうかを実際に確認しますが、接続が実際に確立されているかどうかは示していません。

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;
    }

上記のすべてのコード スニペットは、wifi またはデータが有効になっているかどうかのみを確認します。接続が確立されているかどうかは表示されません。Wi-Fi またはデータが有効になっている場合は、常に true が返されます。

繰り返しますが、私の目標は、接続が確立されているかどうかを確認することです。

どんな助けでも本当に役に立ちます..事前に感謝します..:)

この質問は回答済みです。再度、感謝します。

4

2 に答える 2

5

コメントと回答者に感謝しますが、このソリューションは私にとってはうまくいっていると思います。これは実際にインターネットに接続してステータスを確認しようとしています。これが正しい方法かどうかはわかりません。

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;
    }

これが他の視聴者に役立つことを願っています。

于 2014-04-21T04:45:05.787 に答える