API การวินิจฉัยการเชื่อมต่อ

Connectivity Diagnostics 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, แอปจะต้องได้รับ 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 เป็น CTS ทดสอบโดย ConnectivityDiagnosticsManagerTest