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 ไปยังระบบ เครือข่ายและการเชื่อมต่อที่รายงาน (ไม่ว่าแอปจะเชื่อว่าเครือข่ายมีหรือไม่มีการเชื่อมต่อก็ตาม) จะถูกแชร์

การนำไปปฏิบัติ

หากต้องการใช้ Connectivity Diagnostics API แอปจะต้องได้รับอินสแตนซ์ 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);

การตรวจสอบ

Connectivity Diagnostics API ได้รับการทดสอบ CTS โดย ConnectivityDiagnosticsManagerTest