📖 PrzeglądOverview
Moduł Network (NetworkMonitor) monitoruje stan połączenia sieciowego
i udostępnia go poprzez Flow oraz callbacki. Rozróżnia WiFi, dane komórkowe, VPN i Ethernet.The Network module (NetworkMonitor) monitors network connection status and exposes it via Flow and callbacks. Distinguishes WiFi, cellular, VPN, and Ethernet.
// Sprawdzenie stanu
if (ADict.Network.isOnline()) {
syncData()
}
// Obserwacja (Flow)
ADict.Network.state.collect { state ->
when (state) {
NetworkState.WIFI -> loadHighQualityContent()
NetworkState.CELLULAR -> loadLowQualityContent()
NetworkState.OFFLINE -> showOfflineMode()
}
}
// Callback na reconnect
ADict.Network.onReconnect {
syncPendingData()
}
📊 Stany sieci
| Stan | OpisDescription |
|---|---|
WIFI | Połączenie Wi-FiWi-Fi connection |
CELLULAR | Dane komórkoweCellular data |
ETHERNET | Ethernet |
VPN | VPN |
OFFLINE | Brak połączeniaNo connection |
UNKNOWN | Nieznany stan |
📚 API
isOnline(): Boolean
Czy jest połączenie z Internetem.Whether there is an Internet connection.
isWifi(): Boolean
Czy jest na Wi-Fi.
isCellular(): Boolean
Czy jest na danych komórkowych.Whether on cellular data.
isMetered(): Boolean
Czy połączenie jest płatne za dane.Whether connection is metered.
getCurrentState(): NetworkState
Pobierz aktualny stan.
getNetworkInfo(): NetworkInfo
Pobierz szczegółowe informacje o sieci.Get detailed network information.
onReconnect(callback: () -> Unit)
Callback wywoływany przy ponownym połączeniu.Callback invoked on reconnection.
onStateChange(callback: (NetworkState) -> Unit)
Callback wywoływany przy zmianie stanu.Callback invoked on state change.
whenOnline(action: () -> Unit)
Wykonaj akcję gdy online (lub od razu jeśli już online).Execute action when online (or immediately if already online).
whenWifi(action: () -> Unit)
Wykonaj akcję gdy na Wi-Fi.Execute action when on Wi-Fi.
📡 Flow
state: StateFlow<NetworkState>
Flow aktualnego stanu sieci.
isOnlineFlow: StateFlow<Boolean>
Flow stanu online/offline.
// W Activity/Fragment
lifecycleScope.launch {
ADict.Network.state.collect { state ->
updateNetworkIndicator(state)
}
}
lifecycleScope.launch {
ADict.Network.isOnlineFlow.collect { isOnline ->
offlineBanner.isVisible = !isOnline
}
}
// W ViewModel
class MainViewModel : ViewModel() {
val networkState = ADict.Network.state
.stateIn(viewModelScope, SharingStarted.Lazily, NetworkState.UNKNOWN)
}
💡 PrzykładyExamples
// Sync przy reconnect
ADict.Network.onReconnect {
syncPendingChanges()
uploadQueuedPhotos()
}
// Sync tylko na WiFi
fun uploadLargeFile(file: File) {
ADict.Network.whenWifi {
uploadService.upload(file)
}
}
// Sprawdzenie przed pobieraniem
fun downloadContent(quality: Quality) {
val effectiveQuality = if (ADict.Network.isMetered()) {
Quality.LOW
} else {
quality
}
contentDownloader.download(effectiveQuality)
}
class MainActivity : AppCompatActivity() {
private val offlineBanner: View by lazy { findViewById(R.id.offlineBanner) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ADict.Network.onStateChange { state ->
offlineBanner.isVisible = state == NetworkState.OFFLINE
when (state) {
NetworkState.OFFLINE -> enableOfflineMode()
NetworkState.WIFI -> {
disableOfflineMode()
syncPendingData()
}
NetworkState.CELLULAR -> {
disableOfflineMode()
// Nie syncuj automatycznie - może być drogie
}
else -> {}
}
}
}
}
📦 data class NetworkInfo
- stateNetworkState
- isOnlineBoolean
- isMeteredBoolean
- hasInternetBoolean
- downloadSpeedKbpsInt?
- uploadSpeedKbpsInt?