API לאבחון הקישוריות

Connectivity Diagnostics API מאפשר לאפליקציות שבבעלותן או בניהולן רשתות, כגון אפליקציות ספק, אפליקציות VPN ואפליקציות להצעות Wi-Fi, כדי לקבל אבחון מידע על קישוריות רשת מה-framework. האפליקציות האלה יכולות להירשם להתקשרות חזרה ולקבל התראות עם פרטי קישוריות עבור ברשתות שבבעלותם או שהם מנהלים. אפליקציות לא יקבלו התראות לגבי רשתות לא בבעלות האפליקציה או בניהולה.

דוגמאות לאפליקציות שמנהלות רשתות או שהן הבעלים שלהן:

  • אפליקציות של ספק: ניהול רשתות סלולריות שעבורן subId יש הרשאות ספק עבור
  • אפליקציות של הצעות ל-Wi-Fi: בעלות על רשתות Wi-Fi שהן מציעות מערכת
  • אפליקציות VPN: ניהול כל הרשתות שבהן משתמש ה-VPN שלהם, אבל רק כאשר הם ה-VPN הפעיל

הקריאה החוזרת (callback) תתבצע במקרים הבאים:

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

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • חשד להשהיית נתונים: השהיית נתונים, מצב שבו חבילות IP. אינם זורמים כראוי ברשת, יש חשד. DataStallReport הכיתה מספקת מידע על תיבות נתונים החשודות.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • הקישוריות דווחה: אפליקציה דיווחה על קישוריות באמצעות ConnectivityManager#reportNetworkConnectivity למערכת. הרשת והקישוריות שדווחה (בין אם האפליקציה חושב שהרשת מספקת או לא מספקת קישוריות) משותפת.

הטמעה

כדי להשתמש ב-Connectivity Diagnostics API, האפליקציה צריכה לקבל ConnectivityDiagnosticsManager מהפלטפורמה. צריך להשתמש במופע הזה כדי לרשום לבטל את הרישום ConnectivityDiagnosticsCallback בפועל. שיטות לקריאה חוזרת (callback) שאי אפשר לשנות הן ללא תפעול.

דוגמה ConnectivityDiagnosticsCallback הטמעה:

public class ExampleCallback extends ConnectivityDiagnosticsCallback {
    @Override
    public void onConnectivityReportAvailable(@NonNull ConnectivityReport report) {
        ... 
        // Log data, take action based on report result, etc
        ... 
    }

    @Override
    public void onDataStallSuspected(@NonNull DataStallReport report) {
        ... 
        // Log data, take action based on report result, etc
        ... 
    }

    @Override
    public void onNetworkConnectivityReported(
               @NonNull Network network, boolean hasConnectivity) {
        ... 
        // Log data, take action based on report result, etc
        ... 
    }
}

כדי להירשם להתקשרות חזרה ולקבל התראות, צריך להתקשר registerConnectivityDiagnosticsCallback כדי לבטל את הרישום של השיחות החוזרות ולהפסיק לקבל התראות, צריך להתקשר unregisterConnectivityDiagnosticsCallback

דוגמה לרישום וביטול הרישום ConnectivityDiagnosticsCallback:

NetworkRequest request =
        new NetworkRequest.Builder()
                .addTransportType(TRANSPORT_CELLULAR)
                .build();
// Use an Executor that is appropriate for your use case
Executor executor = Executors.newSingleThreadExecutor();

ConnectivityDiagnosticsManager cdm =
        context.getSystemService(ConnectivityDiagnosticsManager.class);

ExampleCallback callback = new ExampleCallback();
cdm.registerConnectivityDiagnosticsCallback(
        request, executor, callback);

... 
// Collect connectivity information on networks that match with request
... 

cdm.unregisterConnectivityDiagnosticsCallback(callback);

אימות

ה-Connectivity Diagnostics API נבדק על ידי CTS ConnectivityDiagnosticsManagerTest