私は、チェックインターネット状態のためにNetworkStateReceiverを作成しました。&は、イベントバスを介してアクティビティにそのインテントを公開します。活動でアクティビティが発生するたびにイベントバスが呼び出される
public class NetworkStateReceiver extends BroadcastReceiver {
private static final String TAG = "NetworkStateReceiver";
NetworkEvent networkEvent = null;
@Override
public void onReceive(final Context context, final Intent intent) {
LogMe.e(TAG, "Network connectivity change");
if (intent.getExtras() != null && intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
if (Connectivity.isConnected(context)) {
LogMe.i(TAG, "Network " + Connectivity.getNetworkInfo(context) + " connected");
networkEvent = new NetworkEvent(NetworkEvent.INTERNET_CONNECTED, true);
EventBus.getDefault().post(networkEvent);
} else {
LogMe.i(TAG, "Network " + Connectivity.getNetworkInfo(context) + " not connected");
networkEvent = new NetworkEvent(NetworkEvent.INTERNET_GONE, false);
EventBus.getDefault().post(networkEvent);
}
}
}
}
私は onPause にイベントバスONSTART未登録を登録。
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
broadcastReceiver = new NetworkStateReceiverActivity();
registerReceiver(broadcastReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
unregisterReceiver(broadcastReceiver);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onNetworkEvent(NetworkEvent event) {
textView_internet.setText("" + event.isNetworkStateChanged());
if (event.getTAG() == NetworkEvent.INTERNET_CONNECTED) {
if (event.isNetworkStateChanged()) {
LogMe.i(TAG, "Has Internet ....");
Snackbar.make(getWindow().getDecorView().getRootView(), "Has internet ", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
} else if (event.getTAG() == NetworkEvent.INTERNET_GONE) {
if (!event.isNetworkStateChanged()) {
LogMe.i(TAG, "No Internet ....");
Snackbar.make(getWindow().getDecorView().getRootView(), "No internet", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
}
}
しかし、問題はEventbusは、インターネットを介してすべての時間を接続するかしないと呼ばれています。アクティビティが作成されるすべての時間ではなく、ユーザーがネットワーク状態を変更したときにEventbusを呼びたいと思います。それをどのように取り除くのですか?私はまた、活動の放送受信機でのみテストしたが、活動が作成されるたびに放送が受信された。
は、各活動のための放送を登録しないようにしようとしましたが、マニフェストにそれを行いますか?または、アクティビティに追加する場合は、すべてのアクティビティを拡張する「BaseActivity」を実行します。あなたはそこにそれを登録しますが、一度だけ(条件によって)登録します。 –
私の問題:アクティビティが作成されたときに呼び出されるイベントバス。しかし、私はインターネットの状態が変更されたようなイベントが発生したときに必要です。 –