קריאת מצב הרשת

מערכת Android מאפשרת לאפליקציות ללמוד על שינויים דינמיים בקישוריות. משתמשים ב את המחלקות הבאות כדי לעקוב אחר שינויים בקישוריות ולהגיב אליהם:

  • ConnectivityManager מודיע לאפליקציה על מצב הקישוריות במערכת.
  • המחלקה Network מייצגת אחת מהאפשרויות הרשתות שאליהן המכשיר מחובר. אפשר להשתמש ב-Network כמפתח לאיסוף מידע על הרשת, ConnectivityManager או כדי לקשר שקעים ברשת. כשהרשת מתנתק, אז אי אפשר להשתמש באובייקט Network. גם אם המכשיר בשלב מאוחר יותר מתחבר מחדש לאותו מכשיר, אובייקט Network חדש מייצג את ברשת החדשה.
  • האובייקט LinkProperties שמכיל מידע על הקישור לרשת, כמו רשימת ה-DNS שרתים, כתובות IP מקומיות ונתיבי רשת המותקנים עבור הרשת.
  • NetworkCapabilities מכיל מידע על מאפיינים של רשת, כמו מעביר (Wi-Fi, נייד, Bluetooth) ואת מה שהרשת יכולה לספק. לדוגמה, אפשר לשלוח שאילתה לאובייקט כדי לקבוע אם הרשת יכול לשלוח MMS, נמצא מאחורי פורטל שבוי או שמתבצע בו חיוב לפי שימוש בנתונים.

אפליקציות שמתעניינות במצב הקישוריות המיידי בכל זמן נתון יכולות קוראים לשיטות ConnectivityManager כדי לגלות מה סוג הרשת זמינים. השיטות האלה שימושיות לניפוי באגים ומדי פעם לבדיקת תמונת המצב של הקישוריות שזמינה בכל רגע נתון.

לעומת זאת, באופן הסינכרוני ConnectivityManager שיטות לא מדווחות לאפליקציה על כלום אחרי שיחה, כך שהם לא מאפשרים לעדכן את ממשק המשתמש. הם גם לא יכולים לשנות את האפליקציה התנהגות שמבוססת על ניתוק הרשת או על מקרים שבהם יכולות הרשת שינוי.

הקישוריות עשויה להשתנות בכל שלב, ורוב האפליקציות צריכות לכלול תצוגה תמיד רעננה ועדכנית של מצב הרשת במכשיר. האפליקציות יכולות לרשום קריאה חוזרת (callback) אל ConnectivityManager כדי לקבל התראה על שינויים שחשובה עבורה. באמצעות הקריאה החוזרת, האפליקציה יכולה להגיב באופן מיידי לכל שינוי רלוונטי בקישוריות, ללא צורך בעריכת סקרים יקרים שעלול לפספס עדכונים מהירים.

באמצעות NetworkCallback ודרכים אחרות לקבל מידע על מצב הקישוריות של המכשיר לא דורש הרשאה מסוימת. עם זאת, חלק מהרשתות כפופות להרשאות ספציפיות. עבור לדוגמה, יכול להיות שרשתות מוגבלות לא זמינות לאפליקציות. קישור אל לרשת ברקע נדרשת ההרשאה CHANGE_NETWORK_STATE. וחלק יכול להיות שיידרשו הרשאות ספציפיות כדי להריץ שיחות. צריך לעיין עבור כל שיחה, לקבלת פרטים.

קבלת מצב מיידי

מכשיר מבוסס Android יכול לנהל חיבורים רבים בו-זמנית. כדי לקבל מידע על מצב הרשת הנוכחי, צריך קודם מופע של ConnectivityManager:

Kotlin

val connectivityManager = getSystemService(ConnectivityManager::class.java)

Java

ConnectivityManager connectivityManager = getSystemService(ConnectivityManager.class);

בשלב הבא, משתמשים במופע הזה כדי לקבל הפניה לרשת ברירת המחדל הנוכחית app:

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 מספקים מידע על את כל המאפיינים שהמערכת מכירה על רשת.

LinkProperties האובייקט יודע על המסלולים, כתובות הקישור, שם הממשק, פרטי שרת ה-proxy (אם ושרתי DNS. קוראים לשיטה הרלוונטית באובייקט LinkProperties כדי לאחזר את המידע הדרוש.

האובייקט NetworkCapabilities כולל מידע על התעבורה ברשת ועל היכולות שלהם.

תעבורה היא הפשטה של מדיום פיזי שעליו רשת פועלת. דוגמאות נפוצות לאמצעי תחבורה הן אתרנט, Wi-Fi ונייד. גם רשתות VPN ו-Wi-Fi מקצה לקצה יכולות לשמש להעברות. ב-Android, לרשת מסוימת יכולות להיות מספר העברות בו-זמנית. דוגמה זהו VPN שפועל גם באמצעות Wi-Fi וגם באמצעות רשתות סלולריות. ב-VPN יש העברת נתונים ב-Wi-Fi, במכשירים ניידים וב-VPN. כדי לברר אם יש תעבורה מסוימת, השתמשו NetworkCapabilities.hasTransport(int) עם אחד מהקבועים NetworkCapabilities.TRANSPORT_*.

יכולת מתארת מאפיין של הרשת. יכולות לדוגמה: MMS, NOT_METERED וגם INTERNET. רשת עם יכולת MMS יכולה לשלוח ולקבל הודעות של Multimedia Messaging Service ורשת ללא לא יכולה. רשת עם היכולת 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 בנייד. המכשיר מתחבר לנקודת הגישה הזו ומחליף את רשת ברירת המחדל עבור כל אפליקציות לרשת ה-Wi-Fi החדשה.

כשרשת חדשה הופכת לברירת המחדל, נעשה שימוש בכל חיבור חדש שהאפליקציה פותחת הרשת הזו. בשלב כלשהו מאוחר יותר, כל החיבורים שנותרו רשת ברירת המחדל נסגרת באופן מאולץ. אם חשוב לאפליקציה לדעת שרשת ברירת המחדל משתנה, היא רושמת רשת ברירת מחדל קריאה חוזרת באופן הבא:

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) זהו שרת proxy גרוע של רוחב הפס או מידות הרשת. האפליקציה שלך לא יכול להניח שה-Wi-Fi הוא תמיד בלתי נמדד ותמיד מספק רוחב פס טוב יותר מאשר בנייד.

במקום זאת, השתמשו NetworkCapabilities.getLinkDownstreamBandwidthKbps() כדי למדוד רוחב פס, NetworkCapabilites.hasCapability(int) עם NET_CAPABILITY_NOT_METERED של הארגומנטים כדי לקבוע את המדידה. למידע נוסף, עיינו בקטע שעוסק NetworkCapabilities ו-LinkProperties.

כברירת מחדל, שיטות הקריאה החוזרת (callback) מופעלות בשרשור הקישוריות של האפליקציה שלך, שהוא שרשור נפרד שבו ConnectivityManager משתמש. אם של הקריאות החוזרות (callback) צריך לפעול יותר זמן, צריך להפעיל אותן מזינים שרשור עובדים נפרד באמצעות הווריאנט ConnectivityManager.registerDefaultNetworkCallback(NetworkCallback, Handler)

אפשר לבטל את הרישום של הקריאה החוזרת כאשר אין לך יותר שימוש בה על ידי התקשרות ConnectivityManager.unregisterNetworkCallback(NetworkCallback) onPause() של הפעילות העיקרית שלך הוא מקום טוב לעשות זאת, במיוחד אם רושמים את הקריאה החוזרת (callback) 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);

פירוש הדבר הוא שיושמעו לאפליקציה שלך התראות על כל השינויים בנוגע לחומרים ללא חיוב ברשת במערכת.

לגבי הקריאה החוזרת (callback) של הרשת המוגדרת כברירת מחדל, קיימת גרסה של registerNetworkCallback(NetworkRequest, NetworkCallback, Handler) שמקבלת את הערך Handler כדי לא לטעון את ה-thread Connectivity של אפליקציה.

שיחת טלפון ConnectivityManager.unregisterNetworkCallback(NetworkCallback) כשהקריאה החוזרת לא רלוונטית יותר. אפליקציה יכולה להירשם בו-זמנית מספר קריאות חוזרות (callback) ברשת.

לנוחיותכם, האובייקט NetworkRequest מכיל את הפונקציה יכולות נפוצות שרוב האפליקציות צריכות, כולל:

בזמן כתיבת האפליקציה, צריך לבדוק את ברירות המחדל כדי לראות אם הן תואמות תרחיש לדוגמה, ומוחקים את האפשרויות האלה אם רוצים שהאפליקציה תקבל התראות לגבי רשתות שאין להם את היכולות האלה. לעומת זאת, הוסיפו כדי למנוע קבלת קריאה לשינויי קישוריות ברשתות שהאפליקציה לא מקיימת אינטראקציה איתה.

לדוגמה, אם האפליקציה צריכה לשלוח הודעות MMS, יש להוסיף NET_CAPABILITY_MMS ל-NetworkRequest כדי שלא יקבלו הודעות על כל הרשתות שלא יכולות לשלוח הודעות MMS. הוסף TRANSPORT_WIFI_AWARE אם האפליקציה מתעניינת רק בקישוריות Wi-Fi מסוג P2P. NET_CAPABILITY_INTERNET והקבוצה NET_CAPABILITY_VALIDATED הם שימושיים אם אתם רוצים להעביר נתונים באמצעות שרת. באינטרנט.

רצף קריאה חוזרת לדוגמה

בקטע הזה מתואר רצף הקריאות החוזרות שאפליקציה עשויה לקבל אם מתעד גם קריאה חוזרת כברירת מחדל וגם קריאה חוזרת (callback) רגילה במכשיר שיש קישוריות ברשת סלולרית. בדוגמה הזו, המכשיר מתחבר אל נקודת גישה טובה ל-Wi-Fi ואז מתנתקת ממנה. הדוגמה גם מניחה ההגדרה חבילת הגלישה פועלת תמיד מופעלת במכשיר.

לוח הזמנים הוא:

  1. כשהאפליקציה מתקשרת למספר registerNetworkCallback(), השיחה החוזרת מיד מקבל שיחות מ-onAvailable(), מ-onNetworkCapabilitiesChanged() ומ- onLinkPropertiesChanged() לרשת הסלולרית, כי רק זה הרשת זמינה. אם יש רשת אחרת זמינה, האפליקציה מקבל שיחות חוזרות גם מהרשת השנייה.

    תרשים מצב שמראה את אירוע הקריאה החוזרת של הרשת ואת הקריאות החוזרות שהופעלו על ידי האירוע
    איור 1. מצב האפליקציה אחרי השיחה אל registerNetworkCallback().

  2. לאחר מכן, האפליקציה מפעילה קריאה אל registerDefaultNetworkCallback(). רשת ברירת המחדל המערכת תתחיל לקבל שיחות אל onAvailable(), onNetworkCapabilitiesChanged() ו-onLinkPropertiesChanged() עבור הרשת הסלולרית, מכיוון שהרשת הסלולרית היא רשת ברירת המחדל. אם המיקום רשת אחרת שאינה מוגדרת כברירת מחדל, האפליקציה לא יכולה לקבל לרשת שאינה מוגדרת כברירת מחדל.

    תרשים מצב שמראה את אירוע ברירת המחדל של הקריאה החוזרת ברשת ואת
קריאות חוזרות (callbacks) שהופעלו על ידי האירוע
    איור 2. מצב האפליקציה אחרי רישום של רשת ברירת מחדל.

  3. לאחר מכן, המכשיר מתחבר לרשת Wi-Fi (לא נמדדת). הטקסט הרגיל קריאה חוזרת ברשת מקבלת שיחות אל onAvailable(), onNetworkCapabilitiesChanged() ו-onLinkPropertiesChanged() עבור רשת Wi-Fi.

    תרשים מצב שמציג את הקריאות החוזרות (callback) שמופעלות כשהאפליקציה מתחברת
רשת חדשה
    איור 3. מצב האפליקציה לאחר התחברות לרשת Wi-Fi שאינה נמדדת.

  4. בשלב הזה, ייתכן שאימות רשת ה-Wi-Fi יימשך זמן מה. לחשבון במקרה הזה, onNetworkCapabilitiesChanged() קוראת לרשת הרגילה הקריאה החוזרת לא כוללת את היכולת NET_CAPABILITY_VALIDATED. אחרי זמן קצר הוא יקבל שיחה למספר onNetworkCapabilitiesChanged(), היכולות החדשות כוללות את NET_CAPABILITY_VALIDATED. ברוב המקרים, האימות מהיר מאוד.

    כשרשת ה-Wi-Fi מאומתת, המערכת מעדיפה להשתמש ברשת הסלולרית בעיקר מכיוון שהיא לא נמדדת. רשת ה-Wi-Fi הופכת הרשת שמוגדרת כברירת מחדל, כך שהקריאה החוזרת (callback) של הרשת שמוגדרת כברירת המחדל מקבלת קריאה onAvailable(), onNetworkCapabilitiesChanged() וגם onLinkPropertiesChanged() לרשת ה-Wi-Fi. הרשת הסלולרית עוברת לרקע, והקריאה החוזרת (callback) של הרשת הרגילה תקבל קריאה onLosing() לרשת הסלולרית.

    בגלל שהדוגמה הזו מבוססת על ההנחה שחבילת הגלישה פועלת תמיד במכשיר הזה, הרשת הסלולרית אף פעם לא מתנתקת. אם ההגדרה מושבתת, אחרי כשהרשת הסלולרית מתנתקת, והקריאה החוזרת (callback) של הרשת הרגילה מקבל שיחה אל onLost().

    תרשים מצב שמציג את הקריאות החוזרות (callback) שהופעלו כשרשת Wi-Fi
אימות חיבור
    איור 4. מצב האפליקציה לאחר אימות רשת ה-Wi-Fi.

  5. בהמשך, המכשיר מתנתק פתאום מרשת ה-Wi-Fi כי הוא התנתק של הטווח. מכיוון שה-Wi-Fi מתנתק, הקריאה החוזרת (callback) של הרשת הרגילה מקבל התקשרות אל onLost() לרשת Wi-Fi. מאחר שהנייד הוא רשת ברירת המחדל החדשה, הקריאה החוזרת (callback) של הרשת שמוגדרת כברירת מחדל מקבלת שיחות אל onAvailable(), onNetworkCapabilitiesChanged() ו-onLinkPropertiesChanged() עבור הרשת הסלולרית.

    תרשים מצב שמציג את הקריאות החוזרות (callback) שהופעלו כשרשת Wi-Fi
החיבור נותק
    איור 5. מצב האפליקציה לאחר התנתקות מרשת ה-Wi-Fi.

אם ההגדרה חבילת הגלישה פועלת כל הזמן מושבתת, כשה-Wi-Fi מנתקת את המכשיר מנסה להתחבר מחדש לרשת סלולרית. התמונה היא דומה, אבל עם עיכוב קצר נוסף בשיחות onAvailable(), הקריאה החוזרת (callback) של הרשת הרגילה גם מקבלת קריאות אל onAvailable(), onNetworkCapabilitiesChanged() ו-onLinkPropertiesChanged() כי הופך לזמין.

הגבלות על השימוש ברשת לצורך העברת נתונים

היכולת לראות רשת עם קריאה חוזרת (callback) ברשת לא אומרת שהאפליקציה יכולה משתמשים ברשת להעברת נתונים. חלק מהרשתות לא מספקות אינטרנט ורשתות מסוימות, עשויות להיות מוגבלות ל אפליקציות מוגבלות. כדי לבדוק את החיבור לאינטרנט: NET_CAPABILITY_INTERNET וגם NET_CAPABILITY_VALIDATED

השימוש ברשתות ברקע כפוף גם הוא לבדיקות הרשאות. אם האפליקציה רוצה להשתמש ברשת רקע, הוא צריך CHANGE_NETWORK_STATE הרשאה.

אפליקציות עם ההרשאה הזו מאפשרות למערכת לנסות להציג רשת שלא מוצגת, כמו הרשת הסלולרית כשהמכשיר מחובר לרשת Wi-Fi. אפליקציה כזו קוראת ConnectivityManager.requestNetwork(NetworkRequest, NetworkCallback) עם NetworkCallback כדי לקבל קריאה כשהרשת נפתחת.