РеактивнаяСеть: РеактивнаяСеть — это библиотека OHOS, которая слушает состояние сетевого соединения и наличие интернет-соединения с помощью Observable RxJava. Она написана с использованием подхода реактивного программирования.
РеактивнаяСеть включает:
Пример приложения требует следующих разрешений:
ohos.permission.INTERNET
ohos.permission.GET_NETWORK_INFO
Поддержка cleartextTraffic по умолчанию отключена для HTTP. Однако, HTTPS поддерживается по умолчанию. Чтобы поддерживать HTTP, необходимо добавить "network"
в файл config.json и установить атрибут "cleartextTraffic"
в значение true
.
{
"deviceConfig": {
"default": {
"network": {
"cleartextTraffic": true
}
}
}
}
Можно наблюдать за Connectivity
с помощью метода observeNetworkConnectivity(context)
следующим образом:
ReactiveNetwork
.observeNetworkConnectivity(context)
.subscribeOn(Schedulers.io())
... // что угодно еще, что можно сделать с RxJava
.observeOn(HarmonySchedulers.mainThread())
.subscribe(connectivity -> {
// делайте что-то с connectivity
// вы можете вызвать connectivity.getNetworkState();
// или connectivity.getNetworkCapabilities();
},
throwable -> { /* обрабатывайте ошибку здесь */});
```Когда `Connectivity` меняется, подписчики будут уведомлены. `Connectivity` может менять своё состояние или тип.
**Ошибки** могут быть обработаны таким же образом, как и во всех Observable RxJava. Например:
ReactiveNetwork .observeNetworkConnectivity(context) .subscribeOn(Schedulers.io()) .observeOn(HarmonySchedulers.mainThread()) .subscribe( connectivity -> /* обрабатывайте connectivity здесь /, throwable -> / обрабатывайте ошибку здесь */ );
### Наблюдение за состоянием интернет-соединения
#### Наблюдение за состоянием интернет-соединения постоянно
Можно наблюдать за состоянием интернет-соединения постоянно следующим образом:
ReactiveNetwork .observeInternetConnectivity() .subscribeOn(Schedulers.io()) .observeOn(HarmonySchedulers.mainThread()) .subscribe(isConnectedToInternet -> { // делайте что-то с значением isConnectedToInternet }, throwable -> { /* обрабатывайте ошибку здесь */ });
Объект `Observable` вернёт `true` в подписке (disposing) если устройство подключено к Интернету и `false` если нет.
Проверка подключения к Интернету будет выполнена _по возможности как можно быстрее_.**Примечание:** Этот метод менее эффективен, чем метод `observeNetworkConnectivity(context)`, так как при использовании стандартной стратегии наблюдения он открывает сокетное соединение с удалённым хостом каждые две секунды с тайм-аутом в две секунды и потребляет трафик. Используйте этот метод, если это действительно необходимо. В качестве альтернативы вы можете отменить подписку (disposing) сразу после получения уведомления о доступности Интернета и выполнить необходимую работу, чтобы уменьшить количество сетевых запросов.Методы в этом разделе следует использовать, если они действительно необходимы из-за специфических случаев использования.
Если вы хотите настроить наблюдение за подключением к интернету, вы можете использовать класс `InternetObservingSettings` и его билдер.
Они позволяют настраивать интервал мониторинга в миллисекундах, хост, порт, таймаут, начальный интервал мониторинга, ожидаемый код ответа HTTP, обработчик ошибок или всю стратегию наблюдения.
```java
InternetObservingSettings settings = InternetObservingSettings.builder()
.initialInterval(initialInterval)
.interval(interval)
.host(host)
.port(port)
.timeout(timeout)
.httpResponse(httpResponse)
.errorHandler(testErrorHandler)
.strategy(strategy)
.build();
ReactiveNetwork
.observeInternetConnectivity(settings)
.subscribeOn(Schedulers.io())
.observeOn(HarmonySchedulers.mainThread())
.subscribe(isConnectedToInternet -> {
// что-то сделать с значением isConnectedToInternet
},
throwable -> { /* обработать ошибку здесь */});
Эти методы созданы для того, чтобы позволить пользователям полностью настраивать библиотеку и предоставлять им больше контроля.
Примечание: не все параметры имеют значение для всех стратегий.
Если мы не хотим наблюдать за подключением к интернету в интервале с помощью метода Observable<Boolean> observeInternetConnectivity(...)
,
мы можем использовать метод Single<Boolean> checkInternetConnectivity()
, который делает то же самое, но только один раз.
Это может быть полезно в специальных случаях использования.```
Single single = ReactiveNetwork.checkInternetConnectivity();
single .subscribeOn(Schedulers.io()) .observeOn(HarmonySchedulers.mainThread()) .subscribe(isConnectedToInternet -> { // что делать с isConnectedToInternet }, throwable -> { /* обработайте ошибку здесь */} );
Как и в предыдущем случае, вы можете настроить эту функцию с помощью класса `InternetObservingSettings` и его билдера.
```java
InternetObservingSettings settings = InternetObservingSettings.builder()
.initialInterval(initialInterval)
.interval(interval)
.host(host)
.port(port)
.timeout(timeout)
.httpResponse(httpResponse)
.errorHandler(testErrorHandler)
.strategy(strategy)
.build();
Single<Boolean> single = ReactiveNetwork.checkInternetConnectivity(settings);
single
.subscribeOn(Schedulers.io())
.observeOn(HarmonySchedulers.mainThread())
.subscribe(isConnectedToInternet -> {
// сделайте что-то с isConnectedToInternet
},
throwable -> { /* обработайте ошибку здесь */} );
Основная идея та же самая. Единственное отличие — тип возвращаемого значения Single<Boolean>
вместо Observable<Boolean>
,
и отсутствие параметров int initialIntervalInMs
и int intervalInMs
.
Как и раньше, эти методы созданы для того, чтобы позволить пользователям полностью настраивать библиотеку и иметь больше контроля над ней.
Сейчас у нас есть следующие стратегии для наблюдения за соединением с Интернетом:
SocketInternetObservingStrategy
— мониторинг соединения с Интернетом через открытие сокетного соединения с удалённым хостомWalledGardenInternetObservingStrategy
— открытие соединения с удалённым хостом и уважение стран в "стенах сада" (например, Китай)
```Все эти стратегии реализуют интерфейс NetworkObservingStrategy
. По умолчанию используется стратегия `WalledGardenInternetObservingStrategy`, но с помощью методов `checkInternetConnectivity(strategy)` и `observeInternetConnectivity(strategy)` можно явно использовать одну из этих стратегий.Если вам требуется пинговать специальный хост во время проверки соединения с Интернетом, рекомендуется использовать SocketInternetObservingStrategy
. Вы можете сделать это следующим образом:
InternetObservingSettings settings = InternetObservingSettings.builder()
.host("www.yourhost.com")
.port(port)
.strategy(new SocketInternetObservingStrategy())
.build();
ReactiveNetwork
.observeInternetConnectivity(settings)
.subscribeOn(Schedulers.io())
.observeOn(HarmonySchedulers.mainThread())
.subscribe(isConnectedToHost -> {
// сделайте что-то с isConnectedToHost
},
throwable -> { /* обработайте ошибку здесь */ } );
Если вы хотите использовать WalledGardenInternetObservingStrategy
, пожалуйста, обновите код ответа HTTP через InternetObservingSettings
. Например, установите его значение в 200
, так как по умолчанию используется 204
.
То же действие можно выполнить с помощью метода checkInternetConnectivity(strategy, host)
, который возвращает Single
вместо Observable
.
Допустим, мы хотим реагировать на каждое изменение соединения сети и если мы подключаемся к сети, то проверить, подключена ли эта сеть к Интернету. Мы можем это сделать следующим образом:```
ReactiveNetwork
.observeNetworkConnectivity(getApplicationContext())
.flatMapSingle(connectivity -> ReactiveNetwork.checkInternetConnectivity())
.subscribeOn(Schedulers.io())
.observeOn(HarmonySchedulers.mainThread())
.subscribe(isConnected -> {
// isConnected может быть true или false
},
throwable -> { /* Обработайте ошибку здесь */ } );
В случае, когда нам приходят слишком много событий, связанных с изменениями сети, или мы хотим игнорировать предыдущие наблюдатели (в данном примере только один), после того как они были подписаны, мы можем использовать оператор `switchMapSingle` вместо `flatMapSingle`, чтобы получать обновления только от последнего наблюдателя. В этом случае, это будет наблюдатель, созданный методом `checkInternetConnectivity`.
# Инструкции по установке
Библиотечные зависимости
ReactiveNetwork зависит от rxohos.har, rxjava3 и gson.
1. Для использования модуля ReactiveNetwork в вашем образце приложения, добавьте нижеуказанную библиотечную зависимость для генерации hap/library.har.
Измените entry build.gradle следующим образом:
```
dependencies {
implementation 'io.openharmony.tpc.thirdlib:Rxohos:1.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
implementation 'com.google.code.gson:gson:2.8.6'
implementation project(path: ':library')
}
```
2. Для использования ReactiveNetwork в отдельном приложении, добавьте нижеуказанные зависимости и "library.har" в папку libs модуля "entry".
Измените `entry` `build.gradle` следующим образом:
```markdown
dependencies {
implementation fileTree(dir: 'libs', include: ['*.har'])
implementation 'io.openharmony.tpc.thirdlib:Rxohos:1.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
implementation 'com.google.code.gson:gson:2.8.6'
}
```
Для использования `ReactiveNetwork` из удалённого репозитория в отдельном приложении, добавьте следующие зависимости в `entry` `build.gradle`. Измените entry build.gradle следующим образом:
```
dependencies {
implementation 'io.openharmony.tpc.thirdlib:Rxohos:1.0.0'
implementation 'io.openharmony.tpc.thirdlib:ReactiveNetwork:1.0.2'
implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
implementation 'com.google.code.gson:gson:2.8.6'
}
Copyright 2016 Петра Витчена
Разрешено к использованию под лицензией Apache License, Версия 2.0 («Лицензия»);
вы можете использовать этот файл только в соответствии с Лицензией.
Вы можете получить копию Лицензии по адресу
http://www.apache.org/licenses/LICENSE-2.0
Если применимое законодательство или письменное соглашение не требуют этого, программное обеспечение,
распространяемое под Лицензией, распространяется «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, явных или подразумеваемых.
Смотрите Лицензию для конкретного языка, регламентирующего права и условия использования.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )