Connectivity Diagnostics API

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

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

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

הקריאות החוזרות מופעלות במקרים הבאים:

  • אימות רשת: המערכת סיימה להעריך רשת ספציפית. המחלקות 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 למערכת. המידע על הרשת והקישוריות המדווחת (אם האפליקציה חושבת שהרשת מספקת קישוריות או לא) משותף.

הטמעה

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

דוגמה להטמעה של 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);

אימות

ממשק ה-API של אבחון הקישוריות נבדק על ידי CTS על ידי ConnectivityDiagnosticsManagerTest.