7

重複の可能性:
Android でネットワーク接続ステータスを監視するにはどうすればよいですか?

インターネットが接続されているかどうかを継続的に確認し、それに応じて適切なメッセージでテキスト領域を更新する必要があります。ここでasynctaskを作成すると、一度実行されて停止しますが、これは私が望むものではありません。私は常に継続的にチェックしたいのですが、明らかにこれはメインスレッドにあるべきではありません。したがって、サービスも良い選択ではありません。誰でも私を助けることができますこれを処理するための最良かつ効率的なアプローチは何ですか. ありがとう

4

2 に答える 2

9

レシーバーでそれを行います。ネットワーク状態の変化について通知を受けることができます。例えば、

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);
}

さらに、受信者が登録される前の初期状態を取得するには、onResume()メソッドでこれを呼び出します。

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

アプリがこの権限をリクエストしていることを確認してください。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2012-09-24T18:28:16.240 に答える
2

You don't need to constantly ask the OS if there is a network connection. Simply check whether a connection exists in onResume() and then use a BroadcastReceiver to listen for the CONNECTIVITY_ACTION Intent from the ConnectivityManager when the connection is changed and check EXTRA_NO_CONNECTIVITY.

于 2012-09-24T18:25:47.313 に答える