Android מאפשר לאפליקציות לקבל מידע על שינויים דינמיים בקישוריות. אפשר להשתמש בקטגוריות הבאות כדי לעקוב אחרי שינויים בקישוריות ולהגיב להם:
ConnectivityManager
מספר לאפליקציה את מצב הקישוריות במערכת.- הכיתה
Network
מייצגת אחת מהרשתות שהמכשיר מחובר אליהן. אפשר להשתמש באובייקטNetwork
כמפתח כדי לאסוף מידע על הרשת עםConnectivityManager
או כדי לקשר שקעים ברשת. כשהחיבור לרשת מתנתק, אי אפשר להשתמש באובייקטNetwork
. גם אם המכשיר יתחבר מאוחר יותר לאותה מכשיר, אובייקטNetwork
חדש ייצג את הרשת החדשה. - האובייקט
LinkProperties
מכיל מידע על הקישור לרשת, כמו רשימת שרתי ה-DNS, כתובות ה-IP המקומיות ומסלולי הרשת שמותקנים ברשת. - האובייקט
NetworkCapabilities
מכיל מידע על מאפייני הרשת, כמו אמצעי התעבורה (Wi-Fi, סלולרי, Bluetooth) והיכולות של הרשת. לדוגמה, אפשר לשלוח שאילתה על האובייקט כדי לקבוע אם הרשת יכולה לשלוח MMS, נמצאת מאחורי פורטל שבוי או שיש בה חיוב לפי שימוש בנתונים.
אפליקציות שרוצות לדעת מה המצב המיידי של הקישוריות בכל זמן נתון יכולות להפעיל את השיטות של ConnectivityManager
כדי לברר איזה סוג רשת זמין. השיטות האלה מועילות לניפוי באגים ולבדיקה מדי פעם של קובץ snapshot של הקישוריות שזמינה בכל זמן נתון.
עם זאת, השיטות הסינכרוניות של ConnectivityManager
לא מדווחות לאפליקציה על מה שקורה אחרי הקריאה, ולכן לא מאפשרות לעדכן את ממשק המשתמש. הם גם לא יכולים לשנות את התנהגות האפליקציה בהתאם לניתוק מהרשת או כשהיכולות של הרשת משתנות.
הקישוריות יכולה להשתנות בכל שלב, ולרוב האפליקציות צריכה להיות תמיד תצוגה עדכנית של מצב הרשת במכשיר. אפליקציות יכולות לרשום קריאה חוזרת (callback) ל-ConnectivityManager
כדי לקבל התראות על שינויים שחשובים לאפליקציה. באמצעות הקריאה החוזרת, האפליקציה יכולה להגיב מיד לכל שינוי רלוונטי בקישוריות, בלי שתצטרכו לפנות לסקרים יקרים שעלולים לפספס עדכונים מהירים.
באמצעות NetworkCallback
ודרכים אחרות לברר על מצב הקישוריות של המכשיר, לא נדרשת הרשאה מסוימת.
עם זאת, יש רשתות שמחויבות להרשאות ספציפיות.
לדוגמה, יכול להיות שיש רשתות מוגבלות שלא זמינות לאפליקציות. כדי לקשר לרשת ברקע נדרשת ההרשאה CHANGE_NETWORK_STATE
. יכול להיות שלחלק מהקריאות יידרשו הרשאות ספציפיות כדי להריץ אותן. לפרטים נוספים, קראו את מאמרי העזרה הספציפיים של כל קריאה.
אחזור מצב מיידי
מכשיר עם Android יכול לשמור על כמה חיבורים בו-זמנית.
כדי לקבל מידע על מצב הרשת הנוכחי, קודם צריך להשיג מופע של ConnectivityManager
:
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java)
Java
ConnectivityManager connectivityManager = getSystemService(ConnectivityManager.class);
בשלב הבא, משתמשים במופע הזה כדי לקבל הפניה לרשת ברירת המחדל הנוכחית של האפליקציה:
Kotlin
val currentNetwork = connectivityManager.getActiveNetwork()
Java
Network currentNetwork = connectivityManager.getActiveNetwork();
אם האפליקציה מפנה לרשת, האפליקציה יכולה לבקש מידע לגביה:
Kotlin
val caps = connectivityManager.getNetworkCapabilities(currentNetwork) val linkProperties = connectivityManager.getLinkProperties(currentNetwork)
Java
NetworkCapabilities caps = connectivityManager.getNetworkCapabilities(currentNetwork); LinkProperties linkProperties = connectivityManager.getLinkProperties(currentNetwork);
כדי להשתמש בפונקציות שימושיות יותר, צריך לרשום NetworkCallback
.
מידע נוסף על רישום קריאות חזרה מהרשת זמין במאמר האזנה לאירועים ברשת.
NetworkCapabilities ו-LinkProperties
האובייקטים NetworkCapabilities
ו-LinkProperties
מספקים מידע על כל המאפיינים שהמערכת מכירה לגבי רשת.
האובייקט LinkProperties
מכיל מידע על המסלולים, כתובות הקישורים, שם הממשק, פרטי שרת ה-proxy (אם יש כזה) ושרתי ה-DNS. כדי לאחזר את המידע הרצוי, צריך לקרוא ל-method הרלוונטי באובייקט LinkProperties
.
האובייקט NetworkCapabilities
כולל מידע על התעבורה ברשת ועל היכולות שלהן.
תעבורה היא הפשטה של מדיום פיזי שבו פועלת רשת. דוגמאות נפוצות לסוגי התעבורה הן Ethernet, Wi-Fi ו-mobile.
גם רשתות VPN ורשתות Wi-Fi מקצה לקצה (P2P) יכולות לשמש כמעבר.
ב-Android, רשת יכולה לכלול כמה אמצעי העברה בו-זמנית. דוגמה לכך היא VPN שפועל גם ברשתות Wi-Fi וגם ברשתות סלולריות. ב-VPN יש את התעבורות Wi-Fi, mobile ו-VPN. כדי לבדוק אם לרשת יש אמצעי תעבורה מסוים, משתמשים בשיטה NetworkCapabilities.hasTransport(int)
עם אחת מהקבועות NetworkCapabilities.TRANSPORT_*
.
יכולת מתארת מאפיין של הרשת. היכולות לדוגמה כוללות את MMS
, NOT_METERED
ו-INTERNET
. רשת עם יכולת MMS יכולה לשלוח ולקבל הודעות של שירות העברת הודעות מולטימדיה, ורשת ללא היכולת הזו לא יכולה לעשות זאת. רשת עם היכולת NOT_METERED
לא מחייבת את המשתמש על נתונים. האפליקציה יכולה לבדוק אם יש יכולות מתאימות באמצעות השיטה NetworkCapabilities.hasCapability(int)
עם אחד מהקבועים NetworkCapabilities.NET_CAPABILITY_*
.
קבועי NET_CAPABILITY_*
השימושיים ביותר כוללים:
NET_CAPABILITY_INTERNET
: מציין שהרשת מוגדרת לגשת לאינטרנט. הכוונה היא להגדרה ולא ליכולת בפועל להגיע לשרתי האינטרנט הציבוריים. לדוגמה, אפשר להגדיר רשת כדי לקבל גישה לאינטרנט, אבל היא תהיה כפופה לפורטל שבוי.בדרך כלל, לרשת הסלולרית של ספק יש את היכולת
INTERNET
, אבל בדרך כלל אין אותה לרשת Wi-Fi מקומית מסוג P2P. למידע על קישוריות בפועל, ראוNET_CAPABILITY_VALIDATED
.NET_CAPABILITY_NOT_METERED
: מציין שהרשת לא נמדדת לפי שימוש בנתונים. רשת מסוימת מסווגת כרשתית עם מדידה כשהמשתמש רגיש לשימוש נרחב בנתונים בחיבור הזה בגלל עלויות כספיות, מגבלות נתונים או בעיות בביצועי הסוללה.NET_CAPABILITY_NOT_VPN
: מציין שהרשת היא לא רשת וירטואלית פרטית.NET_CAPABILITY_VALIDATED
: המשמעות היא שהרשת מספקת גישה בפועל לאינטרנט הציבורי כשבודקים אותה. רשת שמאחורי פורטל שבוי או רשת שלא מספקת פתרון של שמות דומיינים לא יכולה לבצע את הפעולה הזו. זוהי התוצאה הקרובה ביותר שהמערכת יכולה לספק לגבי רשת שמספקת גישה בפועל, למרות שבעיקרון רשת מאומתת עדיין יכולה להיות כפופה לסינון מבוסס-IP או לסבול מפסקות פתאומות בחיבור עקב בעיות כמו אות חלש.NET_CAPABILITY_CAPTIVE_PORTAL
: מציין שלרשת יש פורטל שבוי כשבודקים אותה.
יש יכולות נוספות שאפליקציות ייעודיות יותר עשויות להתעניין בהן.
מידע נוסף זמין בהגדרות הפרמטרים בקובץ NetworkCapabilities.hasCapability(int)
.
היכולות של רשת יכולות להשתנות בכל שלב. כשהמערכת מזהה פורטל שבוי, היא מציגה התראה שמזמינה את המשתמש להתחבר. במהלך התהליך, לרשת יש את היכולות NET_CAPABILITY_INTERNET
ו-NET_CAPABILITY_CAPTIVE_PORTAL
, אבל לא את היכולת NET_CAPABILITY_VALIDATED
.
כשהמשתמש מבצע פעולה ונכנס לדף של הפורטל השבוי, המכשיר יכול לגשת לאינטרנט הציבורי והרשת מקבלת את היכולת NET_CAPABILITY_VALIDATED
ומאבדת את היכולת NET_CAPABILITY_CAPTIVE_PORTAL
.
באופן דומה, אמצעי התעבורה של רשת יכולים להשתנות באופן דינמי.
לדוגמה, רשת VPN יכולה לשנות את ההגדרות שלה כדי להשתמש ברשת מהירה יותר שנוצרה לאחרונה, כמו מעבר מרשת סלולרית לרשת Wi-Fi בתור הרשת הבסיסית. במקרה כזה, הרשת מאבדת את התעבורה של TRANSPORT_CELLULAR
ומקבלת את התעבורה של TRANSPORT_WIFI
, תוך שמירה על התעבורה של TRANSPORT_VPN
.
האזנה לאירועי רשת
כדי לקבל מידע על אירועי רשת, משתמשים בכיתה NetworkCallback
יחד עם ConnectivityManager.registerDefaultNetworkCallback(NetworkCallback)
ו-ConnectivityManager.registerNetworkCallback(NetworkCallback)
. לשתי השיטות האלה יש מטרות שונות.
לכל האפליקציות ל-Android יש רשת ברירת מחדל, שמוגדרת על ידי המערכת. בדרך כלל המערכת מעדיפה רשתות ללא חיוב על השימוש בהן על פני רשתות עם חיוב על השימוש בהן, ורשתות מהירות יותר על פני רשתות איטיות יותר.
כשאפליקציה שולחת בקשת רשת, למשל באמצעות HttpsURLConnection
, המערכת ממלאת את הבקשה הזו באמצעות רשת ברירת המחדל. אפליקציות יכולות לשלוח תנועה גם ברשתות אחרות. מידע נוסף זמין בקטע רשתות נוספות.
הרשת שמוגדרת כרשת ברירת המחדל יכולה להשתנות בכל שלב במהלך חיי האפליקציה. דוגמה אופיינית היא מצב שבו המכשיר נכנס לטווח של נקודת גישה ידועה, פעילה, ללא חיוב ועם מהירות גבוהה יותר ממהירות האינטרנט בנייד. המכשיר מתחבר לנקודת הגישה הזו ומעביר את רשת ברירת המחדל של כל האפליקציות לרשת ה-Wi-Fi החדשה.
כשרשת חדשה הופכת לברירת המחדל, כל חיבור חדש שהאפליקציה פותחת משתמש ברשת הזו. בשלב מאוחר יותר, כל החיבורים שנותרו ברשת ברירת המחדל הקודמת יופסקו בכוח. אם חשוב לאפליקציה לדעת מתי רשת ברירת המחדל משתנה, היא רושמת קריאה חוזרת (callback) של רשת ברירת המחדל באופן הבא:
Kotlin
connectivityManager.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network : Network) { Log.e(TAG, "The default network is now: " + network) } override fun onLost(network : Network) { Log.e(TAG, "The application no longer has a default network. The last default network was " + network) } override fun onCapabilitiesChanged(network : Network, networkCapabilities : NetworkCapabilities) { Log.e(TAG, "The default network changed capabilities: " + networkCapabilities) } override fun onLinkPropertiesChanged(network : Network, linkProperties : LinkProperties) { Log.e(TAG, "The default network changed link properties: " + linkProperties) } })
Java
connectivityManager.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { Log.e(TAG, "The default network is now: " + network); } @Override public void onLost(Network network) { Log.e(TAG, "The application no longer has a default network. The last default network was " + network); } @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { Log.e(TAG, "The default network changed capabilities: " + networkCapabilities); } @Override public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) { Log.e(TAG, "The default network changed link properties: " + linkProperties); } });
כשרשת חדשה הופכת לברירת המחדל, האפליקציה מקבלת קריאה ל-onAvailable(Network)
עבור הרשת החדשה. כדי להגיב בצורה מתאימה לשינויים בקישוריות, אפשר להטמיע את onCapabilitiesChanged(Network,NetworkCapabilities)
, את onLinkPropertiesChanged(Network,LinkProperties)
או את שניהם.
בקריאה חוזרת שמסומנת ב-registerDefaultNetworkCallback()
, הערך onLost()
מציין שהרשת איבדה את הסטטוס 'רשת ברירת המחדל'. יכול להיות שהוא התנתק.
אפשר לקבל מידע על אמצעי התעבורה שבהם נעשה שימוש ברשת שמוגדרת כברירת מחדל באמצעות שאילתה ל-NetworkCapabilities.hasTransport(int)
, אבל זהו אינדיקטור לא טוב לרוחב הפס או למצב של מדידה ברשת. האפליקציה לא יכולה להניח שחיבור Wi-Fi תמיד לא מחויב ושתמיד יש לו רוחב פס טוב יותר מאשר בנייד.
במקום זאת, משתמשים ב-NetworkCapabilities.getLinkDownstreamBandwidthKbps()
כדי למדוד את רוחב הפס, וב-NetworkCapabilites.hasCapability(int)
עם הארגומנטים NET_CAPABILITY_NOT_METERED
כדי לקבוע את מכסת המאמרים. מידע נוסף זמין בקטע NetworkCapabilities ו-LinkProperties.
כברירת מחדל, שיטות ה-callback נקראות בשרשור החיבור של האפליקציה, שהוא שרשור נפרד ש-ConnectivityManager
משתמש בו. אם ההטמעה של פונקציות ה-callbacks צריכה לבצע פעולות ממושכות יותר, אפשר להפעיל אותן בשרשור עבודה נפרד באמצעות הווריאנט ConnectivityManager.registerDefaultNetworkCallback(NetworkCallback, Handler)
.
אם אתם לא צריכים יותר את האפשרות לקבלת שיחה חוזרת, תוכלו לבטל את הרישום שלה על ידי שליחת הודעת SMS למספר ConnectivityManager.unregisterNetworkCallback(NetworkCallback)
.
אפשר לעשות זאת ב-onPause()
של הפעילות הראשית, במיוחד אם רושמים את הקריאה החוזרת ב-onResume()
.
רשתות נוספות
רשת ברירת המחדל היא הרשת הרלוונטית היחידה לרוב האפליקציות, אבל יכול להיות שבאפליקציות מסוימות יהיה עניין ברשתות אחרות שזמינות. כדי לברר מהן, האפליקציות יוצרות NetworkRequest
שמתאים לצרכים שלהן ומבצעות קריאה ל-ConnectivityManager.registerNetworkCallback(NetworkRequest, NetworkCallback)
.
התהליך דומה להאזנה לרשת ברירת המחדל. עם זאת, יכול להיות שתהיה רק רשת ברירת מחדל אחת שתחול על אפליקציה בכל זמן נתון, אבל הגרסה הזו מאפשרת לאפליקציה לראות את כל הרשתות הזמינות בו-זמנית. לכן, קריאה ל-onLost(Network)
פירושה שהרשת התנתקה לתמיד, ולא שהיא כבר לא ברירת המחדל.
האפליקציה יוצרת NetworkRequest
כדי להודיע ל-ConnectivityManager
לאילו סוגים של רשתות היא רוצה להאזין. בדוגמה הבאה מוסבר איך ליצור NetworkRequest
לאפליקציה שמתעניינת רק בחיבורי אינטרנט ללא חיוב לפי נפח:
Kotlin
val request = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build() connectivityManager.registerNetworkCallback(request, myNetworkCallback)
Java
NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); connectivityManager.registerNetworkCallback(request, myNetworkCallback);
המשמעות היא שהאפליקציה תקבל עדכון על כל שינוי שקשור לרשת ללא מדידה במערכת.
לגבי קריאה חוזרת שמוגדרת כברירת מחדל ברשת, יש גרסה של registerNetworkCallback(NetworkRequest, NetworkCallback, Handler)
שמקבלת Handler
כדי שלא יטען את השרשור Connectivity
של האפליקציה.
צריך להתקשר למספר ConnectivityManager.unregisterNetworkCallback(NetworkCallback)
אם השיחה החוזרת כבר לא רלוונטית. אפליקציה יכולה לרשום בו-זמנית מספר קריאות חוזרות (callback) ברשת.
למען הנוחות, האובייקט NetworkRequest
מכיל את היכולות הנפוצות שרוב האפליקציות זקוקות להן, כולל:
כשיוצרים את האפליקציה, צריך לבדוק את ברירות המחדל כדי לראות אם הן מתאימות לתרחיש לדוגמה שלכם, ולמחוק אותן אם רוצים שהאפליקציה תקבל התראות על רשתות שאין להן את היכולות האלה. לעומת זאת, כדאי להוסיף יכולות כדי למנוע קבלת קריאה לשינויי קישוריות ברשתות שהאפליקציה לא מקיימת איתן אינטראקציה.
לדוגמה, אם האפליקציה צריכה לשלוח הודעות MMS, כדאי להוסיף את התג NET_CAPABILITY_MMS
לNetworkRequest
כדי שלא תקבלו התראות על כל הרשתות שלא יכולות לשלוח הודעות MMS. צריך להוסיף את הערך TRANSPORT_WIFI_AWARE
אם האפליקציה מתעניינת רק בקישוריות Wi-Fi מסוג P2P.
NET_CAPABILITY_INTERNET
ו-NET_CAPABILITY_VALIDATED
יעזרו לכם אם אתם רוצים להעביר נתונים לשרת באינטרנט.
דוגמה לסדרת קריאה חוזרת
בקטע הזה מתוארת רצף הקריאות החוזרות (callbacks) שאפליקציה עשויה לקבל אם היא רושמת גם קריאה חוזרת שמוגדרת כברירת מחדל וגם קריאה חוזרת רגילה במכשיר שיש לו קישוריות לנייד. בדוגמה הזו, המכשיר מתחבר לנקודת גישה טובה ל-Wi-Fi ואז מתנתק ממנו. בנוסף, ההנחה היא שההגדרה חבילת הגלישה פעילה תמיד מופעלת במכשיר.
לוח הזמנים הוא:
כשהאפליקציה מתקשרת למספר
registerNetworkCallback()
, השיחה החוזרת מקבלת מיד שיחות מהמספריםonAvailable()
,onNetworkCapabilitiesChanged()
ו-onLinkPropertiesChanged()
ברשת הסלולרית, כי רק הרשת הזו זמינה. אם יש רשת אחרת שזמינה, האפליקציה מקבלת גם קריאות חזרה מהרשת האחרת.
איור 1. מצב האפליקציה אחרי קריאה ל-registerNetworkCallback()
.לאחר מכן, האפליקציה מפעילה קריאה אל
registerDefaultNetworkCallback()
. הקריאה החוזרת (callback) של הרשת המוגדרת כברירת מחדל מתחילה לקבל קריאות ל-onAvailable()
, ל-onNetworkCapabilitiesChanged()
ול-onLinkPropertiesChanged()
ברשת הסלולרית, כי הרשת הסלולרית היא הרשת המוגדרת כברירת המחדל. אם רשת אחרת שאינה מוגדרת כברירת מחדל פועלת, האפליקציה לא יכולה לקבל שיחות מהרשת הזו.
איור 2. מצב האפליקציה אחרי רישום רשת ברירת מחדל.מאוחר יותר, המכשיר מתחבר לרשת Wi-Fi (ללא חיוב לפי נפח). הקריאה החוזרת (callback) הרגילה של הרשת מקבלת קריאות ל-
onAvailable()
, ל-onNetworkCapabilitiesChanged()
ול-onLinkPropertiesChanged()
של רשת ה-Wi-Fi.
איור 3. מצב האפליקציה לאחר התחברות לרשת Wi-Fi שאינה נמדדת.בשלב הזה, יכול להיות שייקח זמן מה לאמת את רשת ה-Wi-Fi. במקרה כזה, הקריאות של
onNetworkCapabilitiesChanged()
להודעת החזרה (callback) הרגילה של הרשת לא כוללות את היכולתNET_CAPABILITY_VALIDATED
. לאחר זמן קצר, הוא מקבל קריאה ל-onNetworkCapabilitiesChanged()
, שבה היכולות החדשות כוללות אתNET_CAPABILITY_VALIDATED
. ברוב המקרים, האימות מהיר מאוד.כשהמערכת מאמתת את רשת ה-Wi-Fi, היא מעדיפה אותה על פני הרשת לנייד, בעיקר כי אין בה מדידה. רשת ה-Wi-Fi הופכת לרשת ברירת המחדל, כך שהקריאה החוזרת (callback) של רשת ברירת המחדל מקבלת קריאה ל-
onAvailable()
, ל-onNetworkCapabilitiesChanged()
ול-onLinkPropertiesChanged()
עבור רשת ה-Wi-Fi. הרשת הסלולרית עוברת לרקע, והקריאה החוזרת הרגילה מהרשת מקבלת קריאה ל-onLosing()
עבור הרשת הסלולרית.בדוגמה הזו, ההנחה היא שחבילת הגלישה במכשיר הזה תמיד מופעלת, ולכן הרשת הסלולרית אף פעם לא מתנתקת. אם ההגדרה מושבתת, אחרי זמן מה הרשת הסלולרית מתנתקת והשיחה החוזרת מהרשת הרגילה תקבל קריאה למספר
onLost()
.
איור 4. מצב האפליקציה אחרי שתתבצע אימות של רשת ה-Wi-Fi.מאוחר יותר, המכשיר יתנתק באופן פתאומי מה-Wi-Fi כי הוא יצא מטווח הקליטה. מאחר שה-Wi-Fi מתנתק, קריאת החזרה (callback) הרגילה של הרשת מקבלת קריאה ל-
onLost()
עבור Wi-Fi. מאחר שהרשת הסלולרית היא רשת ברירת המחדל החדשה, קריאת החזרה (call back) של רשת ברירת המחדל מקבלת שיחות למספריםonAvailable()
,onNetworkCapabilitiesChanged()
ו-onLinkPropertiesChanged()
ברשת הסלולרית.
איור 5. מצב האפליקציה לאחר התנתקות מרשת ה-Wi-Fi.
אם ההגדרה נתונים סלולריים תמיד פועלים מושבתת, כשהחיבור ל-Wi-Fi יתנתק, המכשיר ינסה להתחבר מחדש לרשת סלולרית. התמונה דומה, אבל עם עיכוב נוסף קצר בקריאות onAvailable()
, והקריאה החוזרת ברשת הרגילה גם מקבלת קריאות אל onAvailable()
, onNetworkCapabilitiesChanged()
ו-onLinkPropertiesChanged()
כי המכשיר הנייד הופך לזמין.
הגבלות על השימוש ברשת להעברת נתונים
אם רואים רשת עם קריאה חוזרת (callback) ברשת, האפליקציה לא יכולה להשתמש ברשת לצורך העברת נתונים. חלק מהרשתות לא מספקות חיבור לאינטרנט, וחלק מהרשתות עשויות להיות מוגבלות לאפליקציות בעלות הרשאות. כדי לבדוק את החיבור לאינטרנט, אפשר לעיין במאמרים NET_CAPABILITY_INTERNET
וNET_CAPABILITY_VALIDATED
.
השימוש ברשתות ברקע כפוף גם הוא לבדיקות הרשאות. אם האפליקציה שלכם רוצה להשתמש ברשת ברקע, היא זקוקה להרשאה CHANGE_NETWORK_STATE
.
אפליקציות עם ההרשאה הזו מאפשרות למערכת לנסות להפעיל רשת שלא פועלת, כמו הרשת הסלולרית כשהמכשיר מחובר לרשת Wi-Fi. אפליקציה כזו קוראת ל-ConnectivityManager.requestNetwork(NetworkRequest, NetworkCallback)
עם NetworkCallback
שייקרא כשהרשת תופעל.