מעקב אחר סטטוס הקישוריות ומדידת החיבור

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