web-dev-qa-db-ja.com

Androidでインターネット接続を確認するにはどうすればよいですか?

各アクティビティでインターネット接続を確認したい。紛失した場合、メッセージが表示されます。

誰でもこれを達成する方法を教えてもらえますか?

59
UMAR

ConnectivityManager を使用して、ネットワークの状態を確認できます。

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

if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED 
    || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) {

    // notify user you are online

}
else if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED 
    || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) {

    // notify user you are not online
}

定数ConnectivityManager.TYPE_MOBILEおよびConnectivityManager.TYPE_WIFIは接続タイプを表し、これら2つの値は網羅的ではないことに注意してください。完全なリストについては、 こちら をご覧ください。


また、ネットワークの状態を監視するために必要な権限があることを確認してください。この権限をAndroidManifest.xmlに追加する必要があります。

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
63
Dan

一度にアクティブにできる接続は1つだけです。簡単な答えは次のとおりです。

final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
    // notify user you are online
} else {
    // notify user you are not online
} 

また、ConnectivityManager#TYPE_WIMAXなどの新しいタイプのネットワークにも対応します。


また、ネットワークの状態を監視するために必要な権限があることを確認してください。この権限をAndroidManifest.xmlに追加する必要があります。

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
125
William

これは、さまざまな種類のネットワークステータスに対して実行できます。

public void  checkNetworkStatus(){

    final ConnectivityManager connMgr = (ConnectivityManager)
     this.getSystemService(Context.CONNECTIVITY_SERVICE);

     final Android.net.NetworkInfo wifi =
     connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

     final Android.net.NetworkInfo mobile =
     connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

     if( wifi.isAvailable() ){

     Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show();
     }
     else if( mobile.isAvailable() ){

     Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show();
     }
     else
     {

         Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show();
     }

}
10
mainu

次のコマンドを使用して、モバイルおよびWi-Fiのネットワークカバレッジとデータの可用性を直接確認できます。

ネットワークカバレッジ可用性の場合、

private boolean isNetworkAvailable()
{
 ConnectivityManager conxMgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);

 NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
 NetworkInfo wifiNwInfo   = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

return ((mobileNwInfo== null ? false : mobileNwInfo.isAvailable()) || (wifiNwInfo == null ? false : wifiNwInfo.isAvailable()));

}

データの可用性ネットワークが利用可能な場合

private boolean isDataAvailable()
{
  ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

 NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
 NetworkInfo wifiNwInfo   = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

return ((mobileNwInfo== null? false : mobileNwInfo.isConnected() )|| (wifiNwInfo == null? false : wifiNwInfo.isConnected()));
}
6
Amar Gore

補正

if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED 
    ||  conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING  ) {
   //notify user you are online
}

あるべき

if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED 
    ||  conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
    //notify user you are online
}
5

ブロードキャストレシーバーをhandle CONNECTIVITY_ACTIONに登録します。これを参照してください 完全な例 。静的変数「connectionAvailable」を更新する必要があります。この変数は、それぞれのゲッターを介していつでもアクセスできます。

manifestファイルでブロードキャストレシーバーを宣言することを忘れないでください。

<receiver Android:name=".NetworkConnectivityReceiver" Android:enabled="true">
    <intent-filter>
        <action Android:name="Android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent-filter>
</receiver>

「各アクティビティのチェックイン」に関して、アクティビティによって拡張されたBaseActivityを使用し、接続のテストを管理し、メッセージを表示することに興味があるかもしれません。

また、sing events(アクティビティからのポーリングではない)の方が効率的であることに注意してください。

3
caligari

値(1)と(0)をハードコーディングする代わりに、ConnectivityManager.getNetworkInfo(0).getState()ConnectivityManager.getNetworkInfo(1).getState()を適切に使用していないConnectivityManager.TYPE_WIFIおよびConnectivityManager.TYPE_MOBILE

1
Naskov

これは、ネットワークアクセスがあるかどうかを確認するブールチェックです。どの種類のネットワークアクセス(モバイル、wifi ...)を判断するのではなく、単にオンラインかどうかを確認するだけです。

boolean mobileNwInfo = false;  
ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);  
try { mobileNwInfo = conxMgr.getActiveNetworkInfo().isConnected(); }  
catch (NullPointerException e) { mobileNwInfo = false; }  
if ( mobileNwInfo == false ) {
  // Your code goes here...
}  
0
VikingGlen