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

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