7

私はプログラムを作成し、wifi を使用してインターネットに接続する必要があります。Wi-Fiが接続されているかどうかを確認するための情報が見つかりました。ただし、状況によっては、wifi AP を接続できますが、https で証明書を作成するために wifi に必要なアカウントとパスワードのようにインターネットを使用できない場合や、wifi AP がインターネットに接続できない場合があります。では、実際にインターネットに接続されていることを確認するにはどうすればよいでしょうか。

4

3 に答える 3

5

www.google.com に対して「Ping」を実行するだけで、ダウンしている可能性は非常に低くなります。

PSそれは私たちのアプリで行うことです..

public static boolean isReachable(Context context) {
    //  First, check we have connectivity
    final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo netInfo = connMgr.getActiveNetworkInfo();

    if (netInfo != null && netInfo.isConnected()) {
        //  check if google is reachable
        try {
            URL url = new URL("http://www.google.com");
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(10 * 1000); // Ten seconds timeout in milliseconds
            urlc.connect();
            if (urlc.getResponseCode() == 200) { // success
                return true;
            } else { // Fail
                return false;
            }
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
            return false;
        }
    } else {
        return false;
    }
}
于 2012-11-04T10:36:49.773 に答える
2

以下を参照してください:

ブール値を返すメソッドを作成します。

    ConnectivityManager connectivityManager;
    NetworkInfo wifiInfo, mobileInfo;

    public Boolean checkNow(Context con){
    try{
        connectivityManager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE);
        wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  

        if(wifiInfo.isConnected() || mobileInfo.isConnected())
        {
            return true;
        }
    }
    catch(Exception e){
        System.out.println("CheckConnectivity Exception: " + e.getMessage());
    }

    return false;
}   

onCreate()以下のようにメソッドで上記のメソッドを使用します。

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

       boolean con = checkNow(getApplicationContext());

       if(con){
           Toast.makeText(getApplicationContext(), "Connection Founded", Toast.LENGTH_SHORT).show();
       }else{
           Toast.makeText(getApplicationContext(), "Connection Not Founded", Toast.LENGTH_SHORT).show();
       }

}

アプリを実行すると"Connection Founded"、デバイスでインターネット接続が利用可能であるかのようにプロンプ​​トが表示されます。それ以外の場合はプロンプトが表示され"Connection Not Founded"ます。

于 2012-11-04T11:01:47.927 に答える
1

以下の方法によると、デバイスが機内モードでない場合、または接続モードで利用可能なネットワークがない場合、メソッドはfalseを返し、それ以外の場合はtrueを返します。上記のシナリオが満たされると、nullが返されることに注意してください。そのため、nullnetInfoオブジェクトをチェックすることによって処理されます。

public boolean isOnline() {
ConnectivityManager conManager =
    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conManager .getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
    return true;
}
return false;

}

マニフェストへのネットワーク状態にアクセスするための許可を取得することを忘れないでください。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2012-11-04T10:53:12.927 に答える