用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.