Android端末がインターネットに接続されているかどうかを検出する必要があります。
NetworkInfoクラスには、非静的メソッド
isAvailable()`が用意されていて、これは完璧だと思います。
問題は以下の通りです。
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
がこのエラーをスローします。
The constructor NetworkInfo is not visible.
安全な賭けとしては、NetworkInfo
オブジェクトを返す別のクラスがあります。しかし、どのクラスかはわかりません。
1.上記のコードを動作させるには? 2.どのようにしてオンラインドキュメントで必要な情報を自分で見つけたのか? 3.この種の検出のためのより良い方法を提案していただけますか?
ConnectivityManagerの
getActiveNetworkInfo()メソッドは、最初に見つかった接続済みのネットワークインターフェースを表す
NetworkInfoインスタンスを返し、どのインターフェースも接続されていない場合は
nullを返します。このメソッドが
null` を返すかどうかをチェックすれば、インターネット接続が可能かどうかを判断するのに十分なはずです。
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
また、以下のものも必要となります。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
をアンドロイドのマニフェストに入れてください。
**編集:************。
アクティブなネットワークインターフェースを持っていても、特定のネットワークサービスが利用できることを保証するものではないことに注意してください。ネットワークの問題、サーバーのダウンタイム、低信号、キャプティブポータル、コンテンツフィルタなどにより、アプリがサーバーに到達できない場合があります。例えば、アプリがTwitterにアクセスできるかどうかは、Twitterのサービスから有効なレスポンスを受け取るまでわかりません。
また、重要な注意点があります。この機能を利用するには、AndroidManifest.xmlでandroid.permission.ACCESS_NETWORK_STATE
を設定する必要があります。
オンラインドキュメントでは、どのようにして必要な情報を得ることができたのでしょうか?
クラスのドキュメントをきちんと読めば、探している答えがすべて見つかるはずです。ConnectivityManager]1のドキュメントを見てみましょう。説明には何をすべきかが書かれています。