5

Android でネットワーク接続を検出する方法に関して、いくつかの質問があります。https://stackoverflow.com/a/4239019/90236は非常に詳細な回答を提供し、https://stackoverflow.com/a/8548926/90236は、接続されているネットワークのタイプを識別する方法を示しています。

次のような回答に似たコードを使用して、ネットワーク接続を検出します。

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

これにより、ユーザーがオフラインの場合に警告することができます。ただし、ユーザーの接続が制限されているかどうかを識別するのには役立ちません。接続が制限されているため、ユーザーから苦情が寄せられています。これらには以下が含まれます:

  1. ユーザーは自宅の Wi-Fi ネットワークに接続されていますが、ケーブル モデムまたはインターネット サービスは利用できません。

  2. ユーザーはホテルやコーヒー ショップにいて、Wi-Fi ネットワークに正常に接続していますが、完全なネットワーク アクセスを許可するには、ネットワークにログインするか、利用規約に同意する必要があります。

これらの両方の状況で、isNetworkAvailable() テストは true を返します。OS は、ネットワークに接続されていることを通知します。ただし、ユーザーは使用可能なインターネット接続を持っていません。

ユーザーのネットワーク接続が完全に機能していることを確認する良い方法はありますか?

軽量の Web サービスを呼び出して接続を確認し、アプリがサービスから有効なリターンを取得できない場合はユーザーに警告することを検討しています。これはやり過ぎですか?または、他の人が同様の手法に頼らなければなりませんでしたか?

4

2 に答える 2