つながっていれば, 情報を表示とかアップロードボタンを有効にとか, 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 件のコメント:
コメントを投稿