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);