Наличие доступа к Интернету - это больше, чем простое условие, если вы думаете об этом, это больше похоже на поток логических значений, иногда это правда, иногда это ложно.
То, что вы хотите, - это создать Observable, который запускаетистина, когда интернет-соединение становится доступным.Если вы работаете на Android, у вас может быть BehaviourSubject в вещательном приемнике
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean hasInternet = wifi.isAvailable() || mobile.isAvailable()
subject.onNext(hasInternet);
}
}
Вам все равно нужно как-то передать объект вашему вещательному приемнику, но это не должно иметь большого значения.
Тогда, чтобы подписаться на свою заметку только тогда, когда эта тема вернет true, вы можете сделать это так:
subject
.filter(hasInternet ->
hasInternet // Don't continue if hasInternet is false
)
.flatMap(o ->
yourObservable // At this point, return the observable cause we have internet
)
.subscribe() // subscribe