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

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

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

  • אפליקציות ספק: נהל רשתות סלולריות שעבורן יש 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 של Connectivity Diagnostics, אפליקציה חייבת להשיג מופע ConnectivityDiagnosticsManager מהפלטפורמה. יש להשתמש במופע זה כדי לרשום ולבטל רישום של יישומי ConnectivityDiagnosticsCallback . שיטות התקשרות חוזרות שאינן מבוטלות הן ללא פעולות.

להלן דוגמה למימוש 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 של Connectivity Diagnostics נבדק על ידי ConnectivityDiagnosticsManagerTest .