ConnectivityManager
מספק ממשק API שמאפשר לבקש מהמכשיר להתחבר לרשת על סמך תנאים שונים, כולל יכולות המכשיר ואפשרויות להעברת נתונים.
הטמעת הקריאה החוזרת מספקת לאפליקציה מידע על סטטוס החיבור של המכשיר ועל היכולות של הרשת שמחוברת כרגע. ה-API מאפשר לכם לקבוע אם המכשיר מחובר כרגע לרשת שעומדת בדרישות של האפליקציה.
הגדרת בקשת רשת
כדי לציין את סוג התעבורה של הרשת, כמו חיבור Wi-Fi או חיבור סלולרי, ואת היכולות של הרשת שמחוברת כרגע, כמו חיבור לאינטרנט, צריך להגדיר בקשת רשת.
מגדירים את הפרמטר NetworkRequest
שמתאר את הצרכים של האפליקציה בחיבור לרשת. הקוד הבא יוצר בקשה לרשת שמחוברת לאינטרנט ומשתמשת בחיבור Wi-Fi או בחיבור סלולרי לסוג התחבורה.
Kotlin
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
Java
NetworkRequest networkRequest = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .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);