2012-09-24 9 views
5

可能性の重複:
How can I monitor the network connection status in Android?効率的なアプローチは、Androidで利用可能です

私は継続的にインターネットが接続されているかどうかを確認するか、テキストエリアを更新する必要が

それに応じて適切なメッセージを表示します。今私がを作成すると、asynctaskは一度実行され、私が欲しいものではない停止します。私は常に瞬時にチェックしたいと思います。明らかに、これはメインスレッド上にあるべきではありません。サービスも良い選択です。誰でも助けてくれますか?これを処理するための最も効率的なアプローチは何ですか?ありがとう

+2

なぜ、

public boolean isNetworkConnected() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnectedOrConnecting()) { return true; } return false; } 

アプリのリクエストこの権限を確認して、あなたのonResume()方法でこれを呼び出して、登録されていた前の初期状態を取得しますこれをする必要がありますか? –

答えて

7

受信機で行います。ネットワーク状態の変化について通知することができます。例えば、

private BroadcastReceiver networkReceiver = new BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    if(intent.getExtras()!=null) { 
     NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { 
      // we're connected 
     } 
    } 
    // we're not connected 
    } 
} 

はあなたのonResume()でこれを登録し、onPause()に登録解除します。

さらに
@Override 
protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(networkReceiver); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
    registerReceiver(networkReceiver, filter); 
} 

、あなたの受信機は

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

Wi-Fiをオンとオフに切り替えるときブロードキャストレシーバーが機能していません。 Onresumeコードは完璧に動作していますが、放送受信者は私に変更を通知していません。どんな助け? – Vyper

+0

私は間違いを見つけました。 – Vyper

+0

@jeffreyねえ、私はあなたのコードを使用してインターネット接続をチェックします。しかし、orResume()メソッドでエラーを出しています.. .. registerReceiver(networkReceiver);このメソッドでは、registerReceiverは2つのパラメータを要求します。ブロードキャストレシーバオブジェクトの場合は1、インテントフィルタの場合は@です。私は2のインスティテュートを通過するのですか? – Google

2

ネットワークに接続されているかどうか常にOSに問い合わせる必要はありません。 onResume()に接続が存在するかどうかを確認し、接続が変更されたときにBroadcastReceiverを使用してConnectivityManagerからCONNECTIVITY_ACTIONインテントをリッスンし、EXTRA_NO_CONNECTIVITYをチェックします。

関連する問題