用Kotlin编写的轻量级模块,用于监视本机Android上的网络状态和飞机模式。
NetworkValidator提供实时网络可用性和飞机模式监视。



电流交流: 1.0.0-snapshot
implementation ' io.github.iodevblue:networkvalidator:current-version '< dependency >
< groudId > io.github.iodevblue </ groudId >
< artifactId > parallaxnavigationdrawer </ artifactId >
< version > current-version </ version >
</ dependency >如果是快照版本,请添加快照Maven Nexus OSS存储库:
maven {
url ' https://s01.oss.sonatype.org/content/repositories/snapshots/ '
}然后检索副本:
implementation ' io.github.iodevblue:parallaxnavigationdrawer:current-version 'libs文件夹中,然后在项目中安装。 implementation fileTree( dir : ' libs ' , include : ' *jar ' )注意:最低支持的Android SDK版本= 23
使用Context创建NetworkValidator实例:
val networkValidator = NetworkValidator (context)验证设备上是否有Internet连接:
val isOnline = networkValidator.isOnline()
if (isOnline) {
retrieveFromRemoteRepo()
} else {
retrieveFromLocalCache()
}验证是否存在通过WiFi进行Internet连接:
val isWifiAvail = networkValidator.isWifiAvailable()
if (isWifiAvail) {
startPackageDownloading()
} else {
informUser()
}验证是否存在通过移动数据进行Internet连接:
val isMobileDataOn = networkValidator.isCellularAvailable()
if (isMobileDataOn) {
connectToServer()
} else {
disconnectFromServer()
}
验证飞机模式是否已打开:
val isOnAirplane = networkValidator.isAirplaneModeActive()
if (isOnAirplane) {
disconnectFromServer()
} else {
doSomethingRemotely()
}
要聆听设备上Internet可用性的更改(WiFi和移动数据),请设置一个OnNetworkChangedListener实例:
val networkValidator = NetworkValidator (context)
networkValidator.onNetworkChangedListener = object : NetworkValidator . OnNetworkChangedListener {
override fun onNetworkChanged ( isOnline : Boolean , network : Network ) {
if (isOnline) {
contactRemoteServer()
}
}
}或使用kotlin接收器函数语法应用OnNetworkChangedListener Listener:
networkValidator.setOnNetworkStateChangedListener { isOnline, _ ->
if (isOnline) {
contactRemoteServer()
}
}注意: onNetworkChanged()回调和setOnNetworkStateChangedListener {...}接收器函数全部在后台Thread中执行。这意味着,必须在Android Activity上这样的UI Thread上执行对网络更改的用户界面函数:
networkValidator.onNetworkChangedListener = object : NetworkValidator . OnNetworkChangedListener {
override fun onNetworkChanged ( isOnline : Boolean , network : Network ) {
runOnUiThread {
if (isOnline) {
contactRemoteServer()
}
}
}
}要收听飞机模式更改,请设置一个OnAirplaneModeSwitchListener实例:
networkValidator.onAirplaneModeSwitchListener = object : NetworkValidator . OnAirplaneModeSwitchListener {
override fun onChanged ( turnedOn : Boolean ) {
if (turnedOn) {
pauseRemoteConnection()
}
}
}或使用Kotlin接收器函数语法应用OnAirplaneModeSwitchListener :
networkValidator.setOnAirplaneModeSwitchListener { isOnline, _ ->
if (isOnline) {
contactRemoteServer()
}
}此外, onChanged()回调和setOnAirplaneModeSwitchListener {...}接收器函数全部在后台Thread中执行,因此,必须在UI线程上以与OnNetworkChangedListener相同的方式在UI Thread上执行用户界面函数。
注意: NetworkValidator使用内部BroadcastReceiver处理接收飞机模式更改事件,并在定义OnAirplaneModeSwitchListener实例时自动注册。当OnAirplaneModeSwitchListener被无效时,它没有注册和无效。
(有关更多详细信息,请参见库代码)
但是,当不使用NetworkValidator以避免内存泄漏时,需要对此内部的BroadcastReceiver进行注册。
在Android Activity中,可以这样做:
override fun onResume () {
super .onResume()
networkValidator.registerAirplaneModeSwitchListener
}
override fun onPause () {
super .onPause()
networkValidator.unregisterAirplaneModeSwitchListener
}还包括Kotlin扩展接收器功能( Context上的扩展)以帮助及时设置:
networkValidator{}返回一个有效的NetworkValidator实例:
networkValidator {
setOnNetworkStateChangedListener { b, _ ->
runOnUiThread {
tv.text = resources.getString( R .string.detect_network)
showProgress()
updateNetworkState(b)
}
}
} listenForNetwork{}内部创建一个网络浏览器,并注册一个OnNetworkChangedListener ,该网络立即开始聆听:
listenForNetwork { b, network ->
if (b) {
updateNetworkState(b)
reInitializeRemoteConnection()
} else {
invalidateRemoteConnection()
informUser()
}
} listenForAirplaneModeChanges{}返回一个网络浏览器,并注册OnAirplaneModeSwitchListener ,该网络直接开始聆听:
val networkValidator = listenForAirplaneModeChanges {
if (it) {
cancelRemoteConnection()
} else {
reInitializeRemoteConnection()
}
}然后,返回的NetworkValidator实例可用于register()和unregister()内部BroadcastReceiver 。
该模块与Java完全互操作。
注意:扩展功能不适用于Java。
创建一个NetworkValidator实例:
NetworkValidator networkValidator = new NetworkValidator ( this );验证设备上是否有Internet连接:
boolean isOnline = networkValidator . isOnline ();
if ( isOnline ) {
retrieveFromRemoteRepo ();
} else {
retrieveFromLocalCache ();
}验证是否存在通过WiFi进行Internet连接:
boolean isWifiAvail = networkValidator . isWifiAvailable ();
if ( isWifiAvail ) {
startPackageDownloading ();
} else {
informUser ();
}验证是否存在通过移动数据进行Internet连接:
boolean isMobileDataOn = networkValidator . isCellularAvailable ();
if ( isMobileDataOn ) {
connectToServer ();
} else {
disconnectFromServer ();
}验证飞机模式是否已打开:
boolean isOnAirplane = networkValidator . isAirplaneModeActive ();
if ( isOnAirplane ) {
disconnectFromServer ();
} else {
doSomethingRemotely ();
}要聆听设备上Internet可用性的更改(WiFi和移动数据),请设置一个OnNetworkChangedListener实例:
NetworkValidator networkValidator = new NetworkValidator ( this );
networkValidator . setOnNetworkChangedListener (( isOnline , network ) -> {
if ( isOnline ) {
contactRemoteServer ();
}
}要收听飞机模式更改,请设置一个OnAirplaneModeSwitchListener实例:
networkValidator . setOnAirplaneModeSwitchListener ( turnedOn -> {
if ( turnedOn ) {
pauseRemoteConnection ();
}
}配置:
| 多变的 | 默认 | 使用 |
|---|---|---|
onNetworkChangedListener | 无效的 | 网络状态更改的听众。 |
onAirplaneModeSwitchListener | 无效的 | 飞机模式的听众更改。 |
| 方法 | 返回 | 使用 |
|---|---|---|
isOnline() | 布尔 | 验证是否存在Internet连接。 |
isWifiAvailable() | 布尔 | 验证是否可以通过WiFi获得Internet连接。 |
isCellularAvailable() | 布尔 | 验证是否可以通过移动数据获得Internet连接。 |
isAirplaneModeActive() | 布尔 | 验证是飞机模式活跃的。 |
unregisterAirplaneModeSwitchListener() | 单元 | 从聆听飞机模式事件中解开onAirplaneModeSwitchListener 。 |
registerAirplaneModeSwitchListener() | 单元 | 注册onAirplaneModeSwitchListener开始聆听飞机模式事件。 |
setOnNetworkStateChangedListener(execute: OnNetworkChangedListener.(Boolean, Network) -> Unit) | 单元 | 设置网络更改侦听器。 |
setOnAirplaneModeSwitchListener(execute: OnAirplaneModeSwitchListener.(Boolean) -> Unit) | 单元 | 设置飞机模式开关侦听器。 |
欢迎贡献者!
注意:此存储库分为两个分支:
所有正在进行的实施和提出的更改都将推向开发分支,最终更新将推向主要分支。
要注意,如果发生了当前的发展,开发分支中的承诺将比主要分支多。
检查贡献以获取更多信息。
可以从更改日志文件中获得更多版本的历史记录。
Copyright 2023 IO DevBlue
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.