ConnectivityManager מספק API שמאפשר לבקש שהמכשיר יתחבר לרשת על סמך תנאים שונים, כולל יכולות המכשיר ואפשרויות להעברת נתונים.
ההטמעה של הקריאה החוזרת מספקת לאפליקציה מידע על סטטוס החיבור של המכשיר ועל היכולות של הרשת שמחוברת כרגע. ה-API מאפשר לכם לקבוע אם המכשיר מחובר כרגע לרשת שעומדת בדרישות של האפליקציה.
הגדרת בקשה לאחזור מהרשת
כדי לציין את סוג התעבורה של הרשת, כמו Wi-Fi או חיבור לרשת סלולרית, ואת היכולות של הרשת שמחוברת כרגע, כמו חיבור לאינטרנט, צריך להגדיר בקשה לאחזור מהרשת.
מצהירים על NetworkRequest שמתאר את צורכי החיבור לרשת של האפליקציה. הקוד הבא יוצר בקשה לרשת שמחוברת לאינטרנט ומשתמשת בחיבור Wi-Fi, אתרנט או חיבור לרשת סלולרית לסוג ההעברה.
Kotlin
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
Java
NetworkRequest networkRequest = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build();
חשוב לזכור שחיבורים מסוימים יכולים להיות יקרים משמעותית מאחרים (לדוגמה, חיבור סלולרי הוא בדרך כלל יקר). משתמשים ב-NetworkCapabilities#NET_CAPABILITY_NOT_METERED כדי לקבוע אם החיבור יקר. כשמשתמשים בחיבור עם חיוב לפי צריכת נתונים, כדאי לנסות להפחית את צריכת הנתונים של האפליקציה או להשהות אותה עד שהמכשיר יתחבר בחיבור בחיוב שנקבע מראש.
הגדרת קריאה חוזרת (callback) ברשת
כשרושמים את NetworkRequest באמצעות ConnectivityManager, צריך להטמיע NetworkCallback כדי לקבל התראות על שינויים בסטטוס החיבור וביכולות הרשת.
אלה הפונקציות הנפוצות ביותר ב-NetworkCallback:
-
onAvailable()מציין שהמכשיר מחובר לרשת חדשה שעומדת בדרישות לגבי היכולות וסוג התעבורה שצוינו ב-NetworkRequest. onLost()מציין שהחיבור של המכשיר לרשת נותק.onCapabilitiesChanged()מציין שהיכולות של הרשת השתנו. האובייקטNetworkCapabilitiesמספק מידע על היכולות הנוכחיות של הרשת.
Kotlin
private val networkCallback = object : ConnectivityManager.NetworkCallback() { // network is available for use override fun onAvailable(network: Network) { super.onAvailable(network) } // Network capabilities have changed for the network override fun onCapabilitiesChanged( network: Network, networkCapabilities: NetworkCapabilities ) { super.onCapabilitiesChanged(network, networkCapabilities) val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) } // lost network connection override fun onLost(network: Network) { super.onLost(network) } }
Java
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); } @Override public void onLost(@NonNull Network network) { super.onLost(network); } @Override public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) { super.onCapabilitiesChanged(network, networkCapabilities); final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } };
הרשמה לקבלת עדכונים על הרשת
אחרי שמצהירים על NetworkRequest ו-NetworkCallback, משתמשים בפונקציות requestNetwork() או registerNetworkCallback() כדי לחפש רשת להתחברות מהמכשיר שעומדת בתנאי של NetworkRequest. הסטטוס מדווח ל-NetworkCallback.
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager connectivityManager.requestNetwork(networkRequest, networkCallback)
Java
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(ConnectivityManager.class); connectivityManager.requestNetwork(networkRequest, networkCallback);