1

インターネット接続を確認する必要がある Android アプリを開発しています。デバイスの WI-FI がオフのときは問題なく動作しますが、Wi-Fi をオンにしても利用可能なネットワークに接続しないと、強制終了します。何が問題なのですか?助けてください boolean isNetworkConnectionAvailable() {

  boolean connected = false;

    ConnectivityManager cm =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm != null) {
        NetworkInfo ni = cm.getActiveNetworkInfo();

        if(ni != null){

                if(ni.isConnected())
                connected = true;
                else
                    connected=false;

           }

    }



    return connected;

}

4

1 に答える 1

5

問題は、デバイスが WIFI に接続されているが、WIFI がインターネットに接続されていないときに true を返すことです。プログラムで ping コマンドを実行することでこれを解決できます。

考え:

1) WIFI に接続していることを確認します。

2) wifi ping に接続してネットワークの可用性を確認する場合。

コード:

public static boolean isOnline(Context con,String url){

    ConnectivityManager cm = (ConnectivityManager)con.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
        if(u!=null){
            return ping(url);
        }else{
            return true;
        }
    }else{
        return false;
    }
}

Ping メソッド:

public static boolean ping(String u) { 
        try {
            URL url = new URL(u);
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setConnectTimeout(500); // Time is in Milliseconds to wait for ping response
            urlc.connect();
            if (urlc.getResponseCode() == 200) {
                Log.i(TAG, "* ping  with ResponseCode: "+urlc.getResponseCode());
                return true;
            }else{
                Log.i(TAG, "* Connection is too slow with ResponseCode: "+urlc.getResponseCode());
                return false;
            }
        }catch (MalformedURLException e1){
            Log.e(TAG,"Erroe in URL to ping"+e1);
            return false;
        }catch (IOException e){
            Log.e(TAG,"Error in ping"+e);
            return false;
        }
    }
于 2012-09-04T05:38:04.863 に答える