2

だから、私の質問は、データを受け取っているかどうかを確認する方法です。シナリオは、Starbucks wifi などの wifi ネットワークに接続していることです (ユーザーは最初にネットワークに接続し、データを受信する前に契約に同意する必要があります)。このコードは私の目的を果たしません。

    ConnectivityManager cm =
        (ConnectivityManager) _mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnected()) {
        return true;
    }
    return false;

ネットワークに接続されている場合は true を返しますが、まだ契約に同意していません。ありがとう、

4

4 に答える 4

0

私のアプリは、クラウド上の Web サーバーで実行されている一連の Web サービスに接続します。したがって、アプリが何かをしようとする前に、この接続が確立されていることを確認する必要があります。インターネットが利用可能かどうかを確認する代わりに、自分のサービスの 1 つを呼び出すだけです。「成功」という単語を返すだけの TestService という単純なものがあります。したがって、私のアプリはサービスを呼び出し、文字列「成功」を受け取り、インターネットに接続され、サービスに正常に到達したことを認識します。このソリューションはうまく機能するため、ConnectivityManager と NetworkInfo について心配する必要はありません。

もちろん、サービス自体がダウンした場合、デバイスがインターネットに接続されているかどうかはわかりません。サービスに到達していないことだけがわかります。ただし、a) サービスが冗長で 99.9% のアップタイムがあることを確認します。b) とにかくサービスに接続しないと、アプリはあまり役に立ちません。インターネットをチェックするだけでなく、必ずオンラインになることがわかっている評判の良い会社の公共サービスに接続することもできます。

于 2013-05-08T18:18:35.887 に答える
0

それを知る方法はありません。これは、OS レベルで処理されるものではなく、ルーターで処理されるためです。OS は、ルーターとのハンドシェイクが完了し、IP を受信したかどうかのみを認識します。ルーターがログイン画面を表示するかどうかは、OS の範囲を超えています。

于 2013-05-08T18:07:21.143 に答える
0

これは、Web サイトに ping を実行することで確認できます。例えば

        try {
            Socket s = new Socket("www.google.com", 80);
            return s.getLocalAddress().getHostAddress();
                            // network connection available
        } catch (Exception e) {
            // no network connection
        }

私はそれを試していません..しかし、私はそれがうまくいくと思います。

うまくいかない場合は、別のことを試すことができます。httprequest を Google に送信し、応答を待ちます。

于 2013-05-08T18:14:10.890 に答える
0

asynctask で実行した内容は次のとおりです。

public Boolean testServer(){
    //stackoverflow.com/questions/9552743/proper-way-to-test-if-server-is-up-in-java    
    //stackoverflow.com/questions/9180072/android-check-connection-to-server
    Boolean boolconnect = false; 

    try {
          myUrl = new URL(UPLOAD_URL);
          connection = myUrl.openConnection();
          connection.setConnectTimeout(30*1000);
          connection.connect();
          Log.i(TAG, "FROM SERVER Connection made to: " + UPLOAD_URL);
          boolconnect = true;

    } catch (SocketException e) {
        // TODO Auto-generated catch block
        Log.i(TAG, "FROM SERVER socket exception:" + e);
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        Log.i(TAG, "FROM SERVER Unknown host:" + e);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.i(TAG, "FROM SERVER IOexception:" + e);
    }
    return boolconnect;
}
于 2013-05-08T18:27:39.900 に答える