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)
אם השיחה החוזרת כבר לא רלוונטית. אפליקציה יכולה לרשום בו-זמנית מספר קריאות חוזרות מהרשת.
למען הנוחות, האובייקט 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 (ללא חיוב לפי נפח). קריאה חוזרת רגילה מהרשת מקבלת קריאות ל-
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()
כי הטלפון הנייד הופך לזמין.
הגבלות על השימוש ברשת להעברת נתונים
היכולת לראות רשת עם קריאה חוזרת מהרשת לא אומרת שהאפליקציה יכולה להשתמש ברשת להעברת נתונים. חלק מהרשתות לא מספקות חיבור לאינטרנט, וחלק מהרשתות עשויות להיות מוגבלות לאפליקציות עם הרשאות. כדי לבדוק את החיבור לאינטרנט, אפשר לעיין במאמרים NET_CAPABILITY_INTERNET
וNET_CAPABILITY_VALIDATED
.
השימוש ברשתות ברקע כפוף גם לבדיקות הרשאות. אם האפליקציה שלכם רוצה להשתמש ברשת ברקע, היא זקוקה להרשאה CHANGE_NETWORK_STATE
.
אפליקציות עם ההרשאה הזו מאפשרות למערכת לנסות להפעיל רשת שלא פועלת, כמו הרשת הסלולרית כשהמכשיר מחובר לרשת Wi-Fi. אפליקציה כזו קוראת ל-ConnectivityManager.requestNetwork(NetworkRequest, NetworkCallback)
עם NetworkCallback
שייקרא כשהרשת תופעל.