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

Szybki przykładQuick Example
// 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
WIFIPołączenie Wi-FiWi-Fi connection
CELLULARDane komórkoweCellular data
ETHERNETEthernet
VPNVPN
OFFLINEBrak połączeniaNo connection
UNKNOWNNieznany 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.

Obserwacja stanu
// 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

Synchronizacja danych
// 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)
}
Offline mode
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?