つながっていれば, 情報を表示とかアップロードボタンを有効にとか, Webを見せたいとか
ネットワークの接続状態を検出して, その結果で処理を決めたいという要求は必ずあるはず。(リアルタイムバージョンはこちら)
※iOS でも同じようなことができます いずれ書きたい
※Enblish version is How to detect Network Status
そんなときは, ConnectivityManager + NetworkInfo を使います。
ConnectivityManager cm = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
まずは, Activity 上で, CpnnectivityManager のインスタンスを取得します。
NetworkInfo info = cm.getActiveNetworkInfo();
次に, NetworkInfo のインスタンスを取得します。
これで, 状態を検出する準備ができました。
この NetworkInfo はいろいろと情報を取得できるみたいですが, 今回は接続状況と, その種類を出すくらいの簡単なサンプルを載せておきます。
わかりやすくするために, 新たにenum のNetworkStatus というのを作って簡単な分類ができるようにしています
○状態をenumでラップ
public enum NetworkStatus { OFF, WIFI, MOBILE, WIMAX, BLUETOOTH, ETHERNET; }
○ネットワークの種類検出のサンプル
public static NetworkStatus getConnectedState( ConnectivityManager manager ) { NetworkStatus status = NetworkStatus.OFF; NetworkInfo info = manager.getActiveNetworkInfo(); if ( info != null ) { if ( info.isConnected() ) { switch ( info.getType() ) { case ConnectivityManager.TYPE_WIFI: // Wifi status = NetworkStatus.WIFI; break; case ConnectivityManager.TYPE_MOBILE_DUN: // Mobile 3G case ConnectivityManager.TYPE_MOBILE_HIPRI: case ConnectivityManager.TYPE_MOBILE_MMS: case ConnectivityManager.TYPE_MOBILE_SUPL: case ConnectivityManager.TYPE_MOBILE: status = NetworkStatus.MOBILE; break; case ConnectivityManager.TYPE_BLUETOOTH: // Bluetooth status = NetworkStatus.BLUETOOTH; break; case ConnectivityManager.TYPE_ETHERNET: // Ethernet status = NetworkStatus.ETHERNET; break; } } } return status; }
○接続しているかの確認
public static boolean isConnected ( ConnectivityManager manager ) { NetworkInfo info = manager.getActiveNetworkInfo(); if (info == null ) { return false; } return info.isConnected(); }○Activityによるテスト
public class NetworkActivity extends Activity { private static String TAG = "Network"; ConnectivityManager cm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); cm = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); // connectivity connectionCheck(); connectionStatus(); } private void connectionCheck() { if ( NetworkConnection.isConnected(cm) ) { Log.i(TAG, "Connected"); } else { Log.i(TAG, "Disconnected"); } } private void connectionStatus() { switch ( NetworkConnection.getConnectedState(cm) ) { case MOBILE: Log.i(TAG, "Mobile"); break; case WIFI: Log.i(TAG, "Wifi"); break; case OFF: Log.i(TAG, "Off"); break; default: Log.i(TAG, "Other"); break; } } }
ネットワークのoff 状態は, 実機でないと検出できないかもしれません。
0 件のコメント:
コメントを投稿