2010-12-11 13 views
3

私は、基本的にはサービス開始時にネットワークとやり取りする必要があるときに、良いサマリア人になろうとするアプリケーションを持っています。このメソッドがfalseを返した場合、私は、ユーザーが電話や3G上にあるので、私は接続されていないことを知っているネットワーク接続がいつ返ってくるかを知る

hasConnectivity方法

private boolean hasConnectivity() { 
    NetworkInfo info = mConnectivity.getActiveNetworkInfo(); 
    boolean connected = false; 
    int netType = -1; 
    int netSubtype = -1; 

    if (info == null) { 
     Log.w(sTag, "network info is null"); 
     notifyUser(MyIntent.ACTION_VIEW_ALL, "There is no network connectivity.", false); 
    } else if (!mConnectivity.getBackgroundDataSetting()) { 
     Log.w(sTag, "background data setting is not enabled"); 
     notifyUser(MyIntent.ACTION_VIEW_ALL, "background data setting is disabled", false); 
    } else { 
     netType = info.getType(); 
     netSubtype = info.getSubtype(); 

     if (netType == ConnectivityManager.TYPE_WIFI) { 
      connected = info.isConnected(); 
     } else if (netType == ConnectivityManager.TYPE_MOBILE 
        && netSubtype == TelephonyManager.NETWORK_TYPE_UMTS 
        && !mTelephonyManager.isNetworkRoaming() 
       ) { 
      connected = info.isConnected(); 
     } else if (info.isRoaming()) { 
      notifyUser(MyIntent.ACTION_VIEW_ALL, "Currently Roaming skipping check.", false); 
     } else if (info.isAvailable()) { 
      connected = info.isConnected(); 
     } else { 
      notifyUser(MyIntent.ACTION_VIEW_ALL, "..There is no network connectivity.", false); 
     } 
    } 
    return connected; 
} 

:私は、デバイスが接続性を持っているかどうかをチェックしていますwifiが利用できない

ネットワーク統計情報をタイマーで定期的に取得して接続が利用可能になったときを知る最も良い方法は何ですか?

接続の変更を通知する予定のブロードキャストレシーバーで観察できるインテントアクションはありますか?

お手数をおかけしていただきありがとうございます。私は次の作業の手がかりを探していきます。

答えて

3

これは私がインターネットアクセスをチェックするために持っているものです(実際には、Wi-Fiが有効になっていてネットワークに接続されている場合と同様です)。

public class ConnectivityReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 

    if(action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) 
    { 
     WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     MainMap.setWifiState(wm.getWifiState()); 
     Log.e("Debug", "Setting wifistate: " + wm.getWifiState()); 
    } else if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) 
    { 
     NetworkInfo ni = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     MainMap.setConnected(ni.isConnected()); 
     Log.e("Debug", "Setting isConnected: " + ni.isConnected()); 
     if(ni.isConnected()) Toast.makeText(context, "Connected!", Toast.LENGTH_LONG).show(); 
    } 
} 

}

ユーザーは、3Gや無線LAN上にあるかどうかを確認するには余りにも難しいことではありません。

+0

ドキュメントをブラウズしていたときに、ConnectivityManager.CONNECTIVITY_ACTIONが見つかりませんでした。まさに私が望んでいたものだった。 – Double

+0

私の検索と呪いの時間を知っておけば、自分自身以外の誰かに助けになりました。 – iarwain01

関連する問題