Connectivity Manager: τι είναι, μέθοδοι και παρακολούθηση σύνδεσης

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-10 Χρόνος ανάγνωσης: 9 λεπ

Το Connectivity Manager είναι μια υπηρεσία συστήματος Android που παρέχει στις εφαρμογές πληροφορίες σχετικά με την κατάσταση δικτυακής σύνδεσης της συσκευής. Επιτρέπει τον έλεγχο ύπαρξης internet, τον προσδιορισμό τύπου δικτύου (Wi-Fi, δεδομένα κινητής, Ethernet), την παρακολούθηση αλλαγών στη σύνδεση και τη διαχείριση αιτημάτων δικτύου ανάλογα με την ποιότητα επικοινωνίας. Σύμφωνα με το Android Developers, 2025, το ConnectivityManager είναι το κύριο API για παρακολούθηση δικτύου και αποτελεί μέρος του Android Framework από το API Level 1.

Βασικά σημεία

  • Connectivity Manager — υπηρεσία συστήματος Android για παρακολούθηση δικτυακής σύνδεσης της συσκευής.
  • NetworkCallback — ο κύριος μηχανισμός παρακολούθησης αλλαγών δικτύου μέσω εγγραφής callbacks.
  • NetworkCapabilities — κλάση που παρέχει λεπτομερείς πληροφορίες για τις δυνατότητες του τρέχοντος δικτύου (Wi-Fi, δεδομένα κινητής, VPN, Ethernet).
  • NetworkRequest — φίλτρο για εγγραφή σε συγκεκριμένους τύπους δικτύου με καθορισμένα χαρακτηριστικά.
  • getActiveNetworkInfo() — παλαιωμένη μέθοδος (deprecated από API 29), αντικαταστάθηκε από NetworkCallback και registerDefaultNetworkCallback.

Τι είναι το Connectivity Manager;

ConnectivityManager είναι μια υπηρεσία συστήματος του λειτουργικού συστήματος Android, προσβάσιμη μέσω Context.getSystemService(Context.CONNECTIVITY_SERVICE). Παρέχει API για λήψη πληροφοριών σχετικά με τη δικτυακή σύνδεση της συσκευής, παρακολούθηση αλλαγών δικτύου και διαχείριση αιτημάτων δικτύου της εφαρμογής. Το Connectivity Manager αποτελεί μέρος του Android Framework από την πρώτη έκδοση της πλατφόρμας (API Level 1) και έχει υποστεί σημαντικές αλλαγές κατά τη διάρκεια των δεκαετιών: από το απλό getActiveNetworkInfo() έως το σύγχρονο reactive μοντέλο με NetworkCallback και NetworkRequest.

Οι βασικές δυνατότητες του Connectivity Manager περιλαμβάνουν: έλεγχο ύπαρξης ενεργής δικτυακής σύνδεσης, προσδιορισμό τύπου δικτύου (Wi-Fi, δεδομένα κινητής, Ethernet, Bluetooth, VPN), παρακολούθηση αλλαγών κατάστασης δικτύου σε πραγματικό χρόνο, λήψη πληροφοριών σχετικά με εύρος ζώνης και καθυστέρηση, διαχείριση αιτημάτων δικτύου της εφαρμογής. Το ConnectivityManager χρησιμοποιείται μαζί με WorkManager και Repository για υλοποίηση αρχιτεκτονικής Offline-First, προσαρμοστική φόρτωση περιεχομένου και βελτιστοποίηση λειτουργίας της εφαρμογής ανάλογα με την ποιότητα σύνδεσης.

Από το Android 10 (API 29), η Google άλλαξε την προσέγγιση εργασίας με το ConnectivityManager. Η μέθοδος getActiveNetworkInfo() έχει κηρυχθεί deprecated και αντ' αυτής συνιστάται η χρήση registerDefaultNetworkCallback() ή registerNetworkCallback() με NetworkRequest. Το νέο API παρέχει πιο λεπτομερείς πληροφορίες για το δίκτυο, συμπεριλαμβανομένης της δυνατότητας ανίχνευσης captive portals (Wi-Fi με αυθεντικοποίηση) και αξιολόγησης ποιότητας σύνδεσης. Το ConnectivityManager είναι επίσης ενσωματωμένο με την οικογένεια Jetpack: η βιβλιοθήκη ConnectivityManager κυκλοφόρησε το 2024 ως μέρος του Jetpack για απλοποίηση παρακολούθησης δικτύου σε εφαρμογές Compose.

Ο ρόλος του Connectivity Manager στην αρχιτεκτονική εφαρμογής

Στη σύγχρονη αρχιτεκτονική Android, το Connectivity Manager χρησιμοποιείται σε επίπεδο Repository ή UseCase για λήψη αποφάσεων σχετικά με αιτήματα δικτύου. Το Repository Layer ελέγχει την κατάσταση δικτύου πριν από την κλήση API: εάν το δίκτυο δεν είναι διαθέσιμο, επιστρέφονται δεδομένα από τοπική αποθήκευση (Room). Εάν το δίκτυο είναι διαθέσιμο, εκτελείται αίτημα στον διακομιστή και το αποτέλεσμα αποθηκεύεται στο Room. Το ViewModel εγγράφεται στο Flow από το Room και δεν γνωρίζει λεπτομέρειες δικτυακής αλληλεπίδρασης — αυτό επιτρέπει εύκολο έλεγχο κάθε επιπέδου ανεξάρτητα.

Πώς λειτουργεί το Connectivity Manager

Το Connectivity Manager λαμβάνει πληροφορίες κατάστασης δικτύου από την υπηρεσία συστήματος connectivity, η οποία αλληλεπιδρά με τις διεπαφές δικτύου του πυρήνα Linux. Όταν η συσκευή συνδέεται σε Wi-Fi ή ενεργοποιεί δεδομένα κινητής, ο πυρήνας ειδοποιεί την υπηρεσία συστήματος, η οποία ενημερώνει την εσωτερική κατάσταση και ειδοποιεί όλα τα εγγεγραμμένα callbacks. Η αρχιτεκτονική του ConnectivityManager βασίζεται στο μοτίβο Observer: η εφαρμογή εγγράφει ένα NetworkCallback και λαμβάνει ειδοποιήσεις για οποιεσδήποτε αλλαγές δικτύου — εμφάνιση σύνδεσης, απώλειά της, αλλαγή τύπου δικτύου ή υποβάθμιση ποιότητας.

Το σύγχρονο API του ConnectivityManager χρησιμοποιεί NetworkRequest για φιλτράρισμα συμβάντων δικτύου. Το NetworkRequest επιτρέπει τον καθορισμό απαιτήσεων για το δίκτυο: μεταφορά (Transport.WIFI, Transport.CELLULAR, Transport.ETHERNET), δυνατότητα πρόσβασης στο internet (NetworkCapabilities.NET_CAPABILITY_INTERNET) και άλλα κριτήρια. Εάν η εφαρμογή χρειάζεται μόνο Wi-Fi για λήψη μεγάλων αρχείων, δημιουργεί ένα NetworkRequest με Transport.WIFI και εγγράφει ένα callback. Το σύστημα ειδοποιεί την εφαρμογή μόνο όταν αλλάζει η σύνδεση Wi-Fi, αγνοώντας συμβάντα κινητού δικτύου.

Ένα σημαντικό χαρακτηριστικό του Connectivity Manager σε Android 12+ — δικτύωση βάσει δυνατοτήτων (capabilities-based networking). Η εφαρμογή δεν ελέγχει απλά «υπάρχει internet», αλλά μπορεί να αξιολογήσει ποιος τύπος κίνησης είναι διαθέσιμος. Για παράδειγμα, το NET_CAPABILITY_NOT_METERED υποδεικνύει απεριόριστη σύνδεση (Wi-Fi), το NET_CAPABILITY_NOT_ROAMING — ότι η συσκευή δεν είναι σε περιαγωγή. Αυτό επιτρέπει τη λήψη αποφάσεων: λήψη βίντεο μόνο μέσω Wi-Fi, αναβολή συγχρονισμού σε περιαγωγή ή χρήση δεδομένων κινητής μόνο για κρίσιμα αιτήματα.

API LevelΣυνιστώμενη μέθοδοςΚατάσταση
1-22getActiveNetworkInfo()Deprecated
21+NetworkCallback + registerNetworkCallback()Συνιστάται
24+registerDefaultNetworkCallback()Συνιστάται
28+getActiveNetwork() + NetworkCapabilitiesΕναλλακτική
31+registerBestMatchingNetworkCallback()Νέο API

Δικαιώματα πρόσβασης για Connectivity Manager

Για τη χρήση του Connectivity Manager σε εφαρμογή Android απαιτούνται δικαιώματα. Το ACCESS_NETWORK_STATE — υποχρεωτικό δικαίωμα για ανάγνωση πληροφοριών δικτύου, δηλώνεται στο AndroidManifest.xml. Χωρίς αυτό το δικαίωμα, το ConnectivityManager επιστρέφει null για getActiveNetwork() και δεν καλεί τα callbacks. Για εκτέλεση λειτουργιών δικτύου απαιτείται επίσης το δικαίωμα INTERNET. Από το Android 10 (API 29), η εφαρμογή μπορεί να ελέγχει την κατάσταση δικτύου χωρίς επιπλέον δικαιώματα χρόνου εκτέλεσης — το ACCESS_NETWORK_STATE είναι κανονικό δικαίωμα (normal) και παρέχεται αυτόματα κατά την εγκατάσταση.

Βασικές μέθοδοι του Connectivity Manager

Το σύγχρονο Connectivity Manager παρέχει πολλές βασικές μεθόδους για εργασία με δίκτυο. Η getActiveNetwork() (API 23+) επιστρέφει αντικείμενο Network της τρέχουσας ενεργής σύνδεσης ή null εάν η συσκευή δεν είναι συνδεδεμένη. Αυτή η μέθοδος δεν απαιτεί callbacks και είναι κατάλληλη για μία μόνο επιβεβαίωση. Το αντικείμενο Network μπορεί να μεταφερθεί στο NetworkCapabilities για λήψη λεπτομερών πληροφοριών: τύπος μεταφοράς, κατάσταση metered, περιαγωγή, δυνατότητα πρόσβασης στο internet και άλλα χαρακτηριστικά.

Η registerDefaultNetworkCallback() (API 24+) — ο προτιμώμενος τρόπος παρακολούθησης δικτύου. Η εφαρμογή εγγράφει ένα callback που καλείται σε οποιεσδήποτε αλλαγές στο προεπιλεγμένο δίκτυο (το δίκτυο μέσω του οποίου η εφαρμογή στέλνει κίνηση). Το callback λαμβάνει αντικείμενο Network που μπορεί να χρησιμοποιηθεί για σύνδεση sockets και HTTP clients. Αυτή η μέθοδος αντικαθιστά την παλαιωμένη getActiveNetworkInfo() και παρέχει reactive παρακολούθηση δικτύου χωρίς polling.

Η registerNetworkCallback() (API 21+) επιτρέπει εγγραφή σε αλλαγές συγκεκριμένου τύπου δικτύου μέσω NetworkRequest. Για παράδειγμα, η εφαρμογή μπορεί να παρακολουθεί μόνο δίκτυα Wi-Fi μέσω new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(). Το σύστημα ειδοποιεί την εφαρμογή για σύνδεση/αποσύνδεση Wi-Fi, χωρίς να επηρεάζει συμβάντα κινητού δικτύου. Η NetworkCapabilities.getLinkDownstreamBandwidthKbps() επιστρέφει εκτίμηση εύρους ζώνης κατερχόμενης ζεύξης σε kbps, επιτρέποντας την προσαρμογή ποιότητας περιεχομένου στην ταχύτητα σύνδεσης.

ΜέθοδοςΕλάχιστο APIΣκοπός
getActiveNetwork()23Λήψη τρέχουσας ενεργής σύνδεσης
getNetworkCapabilities()21Λήψη δυνατοτήτων δικτύου (τύπος, metered, περιαγωγή)
registerDefaultNetworkCallback()24Παρακολούθηση προεπιλεγμένου δικτύου
registerNetworkCallback()21Παρακολούθηση δικτύων βάσει φίλτρου NetworkRequest
unregisterNetworkCallback()21Ακύρωση εγγραφής callback
getActiveNetworkInfo()1Deprecated, μη χρησιμοποιείτε

ConnectivityManager στο Jetpack Compose

Η βιβλιοθήκη Jetpack Connectivity (androidx.core:core-ktx) παρέχει βολικές επεκτάσεις για εργασία με ConnectivityManager στο Compose. Η συνάρτηση ConnectivityManager.observeAsState() επιστρέφει State που ενημερώνεται όταν αλλάζει το δίκτυο. Το στοιχείο @Composable NetworkStatus() εμφανίζει την κατάσταση σύνδεσης και ανασχεδιάζεται αυτόματα με αλλαγές. Αυτό απαλλάσσει τον προγραμματιστή από τη χειροκίνητη διαχείριση callbacks και κύκλου ζωής Activity/Fragment.

NetworkCallback και επεξεργασία αλλαγών δικτύου

Το ConnectivityManager.NetworkCallback είναι μια αφηρημένη κλάση με μεθόδους που καλούνται από το σύστημα όταν αλλάζει η κατάσταση δικτύου. Η onAvailable(Network) — καλείται όταν το δίκτυο γίνεται διαθέσιμο. Η εφαρμογή λαμβάνει αντικείμενο Network που μπορεί να χρησιμοποιηθεί για σύνδεση sockets μέσω Network.bindSocket(). Η onLost(Network) — καλείται όταν το δίκτυο γίνεται μη διαθέσιμο. Η εφαρμογή πρέπει να μεταβεί σε τοπικά δεδομένα ή να εμφανίσει μήνυμα απουσίας σύνδεσης. Η onCapabilitiesChanged(Network, NetworkCapabilities) — καλείται όταν αλλάζουν τα χαρακτηριστικά δικτύου (π.χ. κατά τη μετάβαση από Wi-Fi σε δεδομένα κινητής).

Η σωστή επεξεργασία αλλαγών δικτύου απαιτεί προσοχή στον κύκλο ζωής του στοιχείου. Το callback πρέπει να εγγράφεται στο onStart()/onResume() και να ακυρώνεται στο onStop()/onPause(). Εάν το callback δεν ακυρωθεί, μπορεί να συνεχίσει να καλείται μετά την καταστροφή του Activity, προκαλώντας διαρροή μνήμης. Στην αρχιτεκτονική Jetpack ViewModel συνιστάται η χρήση lifecycleScope για εγγραφή callback, ώστε να ακυρώνεται αυτόματα κατά τον καθαρισμό του ViewModel. Για υπηρεσίες και εργασίες παρασκηνίου χρησιμοποιείται WorkManager με περιορισμό NetworkType.

Επεξεργασία captive portals — μια σημαντική δυνατότητα του ConnectivityManager από Android 10. CAPTIVE_PORTAL — σενάριο όπου το δίκτυο Wi-Fi είναι διαθέσιμο αλλά απαιτεί αυθεντικοποίηση μέσω ιστοσελίδας (αεροδρόμια, ξενοδοχεία, καφετέριες). Το NetworkCapabilities.NET_CAPABILITY_VALIDATED υποδεικνύει ότι το δίκτυο έχει πλήρη πρόσβαση στο internet. Εάν το NET_CAPABILITY_VALIDATED απουσιάζει, η εφαρμογή μπορεί να ανοίξει πρόγραμμα περιήγησης για αυθεντικοποίηση μέσω captive portal. Για ανίχνευση captive portal χρησιμοποιείται η μέθοδος isCaptivePortal() που προστέθηκε στο Android 11 (API 30).

Δίκτυο για συγκεκριμένους σκοπούς (NetworkRequest)

Το ConnectivityManager επιτρέπει την αίτηση δικτύου για συγκεκριμένους σκοπούς μέσω requestNetwork() και bindProcessToNetwork(). Για παράδειγμα, μια εφαρμογή για λήψη μεγάλων αρχείων μπορεί να ζητήσει δίκτυο Wi-Fi ακόμα κι αν το κινητό είναι ενεργό. Για αυτό δημιουργείται ένα NetworkRequest με addTransportType(TRANSPORT_WIFI) και όταν εμφανίζεται Wi-Fi, το σύστημα καλεί onAvailable(). Η εφαρμογή συνδέει sockets με αυτό το δίκτυο μέσω network.bindSocket() ή OkHttp με διαμορφωμένο αντικείμενο Network. Αυτό παρέχει ευέλικτο έλεγχο στη χρήση διεπαφών δικτύου.

Παράδειγμα υλοποίησης σε Kotlin

Ας εξετάσουμε ένα πλήρες παράδειγμα χρήσης του ConnectivityManager με σύγχρονο API (NetworkCallback) σε αρχιτεκτονική Clean Architecture. Το NetworkMonitor — μια κλάση wrapper γύρω από το ConnectivityManager που παρέχει reactive κατάσταση δικτύου μέσω StateFlow. Το ViewModel εγγράφεται σε αυτό το Flow και μεταφέρει την κατάσταση στο UI. Το Repository χρησιμοποιεί το NetworkMonitor για λήψη αποφάσεων σχετικά με αιτήματα δικτύου. Αυτή η προσέγγιση εξασφαλίζει ελεγξιμότητα και απομόνωση εξαρτήσεων πλατφόρμας.

Το παρακάτω παράδειγμα δείχνει πώς να χρησιμοποιείτε σωστά το ConnectivityManager με registerDefaultNetworkCallback. Η κλάση NetworkMonitor ενσωματώνει την εργασία με την υπηρεσία συστήματος και παρέχει ένα καθαρό Kotlin Flow. Εγγράφει το callback κατά την εκκίνηση και το ακυρώνει κατά την ολοκλήρωση του κύκλου ζωής. Η ασύγχρονη εργασία εξασφαλίζεται μέσω coroutines και callbackFlow — μια γέφυρα μεταξύ του στυλ callback του ConnectivityManager και του reactive στυλ Flow της Kotlin.

kotlin
class NetworkMonitor(
    private val connectivityManager: ConnectivityManager
) {
    val isOnline: StateFlow<Boolean> = callbackFlow {
        val callback = object : ConnectivityManager.NetworkCallback() {
            override fun onAvailable(network: Network) {
                trySend(true)
            }
            override fun onLost(network: Network) {
                trySend(false)
            }
            override fun onCapabilitiesChanged(
                network: Network,
                caps: NetworkCapabilities
            ) {
                val connected = caps.hasCapability(
                    NetworkCapabilities.NET_CAPABILITY_INTERNET
                )
                trySend(connected)
            }
        }
        connectivityManager.registerDefaultNetworkCallback(callback)
        awaitClose {
            connectivityManager.unregisterNetworkCallback(callback)
        }
    }.stateIn(
        CoroutineScope(Dispatchers.Default),
        SharingStarted.WhileSubscribed(5000),
        initialValue = checkInitialState()
    )

    private fun checkInitialState(): Boolean {
        val network = connectivityManager.getActiveNetwork() ?: return false
        val caps = connectivityManager.getNetworkCapabilities(network) ?: return false
        return caps.hasCapability(
            NetworkCapabilities.NET_CAPABILITY_INTERNET
        )
    }
}

Χρήση του NetworkMonitor σε ViewModel και Repository

Το ViewModel εγγράφεται στο NetworkMonitor.isOnline μέσω stateIn() και μεταφέρει την κατάσταση στο Compose. Το Repository ελέγχει την τρέχουσα τιμή isOnline.value πριν από την κλήση API: εάν είναι false — επιστρέφει Flow από Room. Εάν είναι true — καλεί το API, αποθηκεύει το αποτέλεσμα στο Room και επιστρέφει Flow από Room. Το WorkManager χρησιμοποιεί NetworkType.CONNECTED για περιορισμό εργασιών παρασκηνίου. Η δοκιμή του NetworkMonitor γίνεται με mock αντικείμενο ConnectivityManager και fake NetworkCallback, επιτρέποντας προσομοίωση οποιουδήποτε σεναρίου δικτύου σε unit tests.

Best Practices και συχνά λάθη

Ο πρώτος κανόνας εργασίας με το ConnectivityManager — να μη χρησιμοποιείτε deprecated API. Η getActiveNetworkInfo() είναι deprecated από API 29 και μπορεί να επιστρέφει εσφαλμένα δεδομένα σε νέες εκδόσεις Android. Αντ' αυτής χρησιμοποιήστε getActiveNetwork() + getNetworkCapabilities() για μία μόνο επιβεβαίωση και registerDefaultNetworkCallback() για συνεχή παρακολούθηση. Η παλιά μέθοδος επίσης δεν διακρίνει δίκτυα με captive portal από πλήρες internet, οδηγώντας σε ψευδείς ενεργοποιήσεις.

Δεύτερος κανόνας — πάντα να ακυρώνετε την εγγραφή callback. Εάν ένα Activity εγγράφει NetworkCallback στο onStart() αλλά δεν το ακυρώνει στο onStop(), το callback συνεχίζει να λειτουργεί μετά την καταστροφή του Activity. Αυτό προκαλεί διαρροή μνήμης και πιθανό NullPointerException όταν το callback επιχειρεί να ενημερώσει το UI του κατεστραμμένου στοιχείου. Χρησιμοποιήστε lifecycleScope ή repeatOnLifecycle για αυτόματη διαχείριση εγγραφής. Στο Jetpack Compose χρησιμοποιήστε DisposableEffect για εγγραφή και ακύρωση callback.

Τρίτο συχνό λάθος — έλεγχος μόνο ύπαρξης δικτύου χωρίς να λαμβάνεται υπόψη η ποιότητά του. Το απλό «υπάρχει internet» δεν επαρκεί για λήψη αποφάσεων. Η εφαρμογή πρέπει να ελέγχει NET_CAPABILITY_NOT_METERED για λήψη μεγάλων αρχείων, NET_CAPABILITY_NOT_ROAMING για συγχρονισμό στο παρασκήνιο, NET_CAPABILITY_VALIDATED για επιβεβαίωση πρόσβασης στο internet. Η αγνόηση αυτών των σημαιών οδηγεί στο να επιχειρεί η εφαρμογή λήψη βίντεο σε περιαγωγή ή συγχρονισμό δεδομένων μέσω captive portal ξενοδοχείου.

Τέταρτο — μη χρησιμοποιείτε το ConnectivityManager για έλεγχο διαθεσιμότητας συγκεκριμένου διακομιστή. Το ConnectivityManager αναφέρει την κατάσταση δικτύου στη συσκευή αλλά δεν εγγυάται ότι ο διακομιστής είναι διαθέσιμος. Για έλεγχο διαθεσιμότητας API χρησιμοποιήστε HTTP αίτημα με σύντομο χρονικό όριο ή Health Check. ConnectivityManager + HTTP ping — αξιόπιστος συνδυασμός: πρώτα ελέγχεται η ύπαρξη δικτύου, στη συνέχεια εκτελείται ένα ελαφρύ αίτημα στον διακομιστή για επιβεβαίωση πραγματικής διαθεσιμότητας.

Δοκιμή ConnectivityManager

Για unit tests χρησιμοποιήστε Robolectric με ShadowConnectivityManager που επιτρέπει προσομοίωση κατάστασης δικτύου. Για integration tests — Android Test Orchestrator με εναλλαγή λειτουργίας Airplane Mode. Στα tests ελέγξτε σενάρια: μετάβαση από online σε offline, εμφάνιση Wi-Fi όταν είναι ενεργό κινητό δίκτυο, απώλεια δικτύου κατά την εκτέλεση αιτήματος, captive portal, περιαγωγή. Για mocking σε αρθρωτά tests χρησιμοποιήστε διεπαφή wrapper (π.χ. NetworkMonitorInterface) που μπορεί να αντικατασταθεί με mock αντικείμενο χωρίς εξαρτήσεις πλατφόρμας.

Συχνές ερωτήσεις

Πώς ελέγχω εάν η συσκευή είναι συνδεδεμένη στο internet;

Σύγχρονος τρόπος — χρήση registerDefaultNetworkCallback() με έλεγχο NET_CAPABILITY_INTERNET στο onCapabilitiesChanged(). Για μία μόνο επιβεβαίωση: connectivityManager.getActiveNetwork()?.let { caps -> caps.hasCapability(NET_CAPABILITY_INTERNET) } ?: false. Η παλαιωμένη μέθοδος getActiveNetworkInfo() δεν συνιστάται από API 29+.

Ποιο δικαίωμα χρειάζεται για το ConnectivityManager;

Για ανάγνωση πληροφοριών δικτύου απαιτείται το δικαίωμα android.permission.ACCESS_NETWORK_STATE. Είναι κανονικό δικαίωμα (normal permission) — παρέχεται αυτόματα κατά την εγκατάσταση της εφαρμογής και δεν απαιτεί αίτηση χρόνου εκτέλεσης. Για εκτέλεση λειτουργιών δικτύου (HTTP αιτήματα) απαιτείται επίσης το δικαίωμα INTERNET.

Ποια είναι η διαφορά μεταξύ registerDefaultNetworkCallback και registerNetworkCallback;

Η registerDefaultNetworkCallback() παρακολουθεί το προεπιλεγμένο δίκτυο — αυτό μέσω του οποίου η εφαρμογή στέλνει την κύρια κίνηση. Η registerNetworkCallback(NetworkRequest) παρακολουθεί δίκτυα που αντιστοιχούν σε συγκεκριμένο φίλτρο (π.χ. μόνο Wi-Fi). Το default callback είναι απλούστερο και καλύπτει το 90% των σεναρίων, ενώ το custom request είναι για συγκεκριμένες απαιτήσεις τύπου δικτύου.

Πώς προσδιορίζω τον τύπο δικτύου: Wi-Fi ή δεδομένα κινητής;

Χρησιμοποιήστε NetworkCapabilities: caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) για Wi-Fi, hasTransport(TRANSPORT_CELLULAR) για δεδομένα κινητής. Μη χρησιμοποιείτε ConnectivityManager.getActiveNetworkInfo().getType() — αυτή η μέθοδος είναι deprecated. Το NetworkCapabilities είναι προσβάσιμο μέσω connectivityManager.getNetworkCapabilities(network).

Γιατί η getActiveNetworkInfo() είναι deprecated;

Η getActiveNetworkInfo() είναι deprecated λόγω ανακρίβειας: δεν διακρίνει δίκτυα με captive portal από πλήρες internet, δεν παρέχει πληροφορίες για εύρος ζώνης και περιαγωγή. Από Android 10, αυτή η μέθοδος μπορεί να επιστρέφει null ή εσφαλμένα δεδομένα για πολυκαναλικές συνδέσεις (multi-network). Αντικατάσταση — getActiveNetwork() + NetworkCapabilities.

Σύνοψη

  • ConnectivityManager — υπηρεσία συστήματος Android για παρακολούθηση δικτυακής σύνδεσης, προσβάσιμη μέσω getSystemService(CONNECTIVITY_SERVICE).
  • Σύγχρονο API — registerDefaultNetworkCallback() + NetworkCapabilities, αντικατέστησε την παλαιωμένη getActiveNetworkInfo() από API 29.
  • NetworkCapabilities — κλάση για έλεγχο τύπου δικτύου (Wi-Fi, Cellular), metering, περιαγωγής και επικύρωσης σύνδεσης internet.
  • NetworkCallback — μηχανισμός reactive παρακολούθησης με μεθόδους onAvailable, onLost και onCapabilitiesChanged για παρακολούθηση αλλαγών δικτύου.
  • NetworkRequest — φίλτρο για εγγραφή σε δίκτυα συγκεκριμένου τύπου, χρησιμοποιείται με registerNetworkCallback() για ακριβή έλεγχο.
  • Δικαίωμα ACCESS_NETWORK_STATE — απαραίτητο για εργασία με ConnectivityManager, παρέχεται αυτόματα κατά την εγκατάσταση εφαρμογής.
  • Best Practices — ακύρωση callbacks στο onStop(), έλεγχος NET_CAPABILITY_NOT_METERED και NET_CAPABILITY_VALIDATED, μη βασίζεστε μόνο στην ύπαρξη δικτύου χωρίς έλεγχο ποιότητας.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης