API Chẩn đoán kết nối

API Chẩn đoán kết nối cho phép các ứng dụng sở hữu hoặc quản lý mạng, chẳng hạn như như ứng dụng của nhà mạng, ứng dụng VPN và ứng dụng đề xuất Wi-Fi để nhận thông tin chẩn đoán thông tin về kết nối mạng từ khung này. Những ứng dụng này có thể đăng ký và nhận thông báo kèm theo thông tin kết nối cho mà họ sở hữu hoặc quản lý. Ứng dụng sẽ không nhận được thông báo về mạng không do ứng dụng sở hữu hoặc quản lý.

Sau đây là ví dụ về các ứng dụng quản lý hoặc sở hữu mạng:

  • Ứng dụng của nhà mạng: Quản lý các mạng di động mà subId của họ có đặc quyền của nhà mạng cho
  • Ứng dụng đề xuất Wi-Fi: Các mạng Wi-Fi sở hữu mà ứng dụng đề xuất cho hệ thống
  • Ứng dụng VPN: Quản lý tất cả các mạng mà VPN sử dụng, nhưng chỉ khi chúng là VPN đang hoạt động

Lệnh gọi lại được gọi trong các trường hợp sau:

  • Xác thực mạng: Hệ thống đã đánh giá xong một mạng cụ thể. Chiến lược phát hành đĩa đơn ConnectivityReport lớp này cung cấp thông tin về trạng thái hiện tại của mạng và kết quả của bất kỳ xét nghiệm hoặc quy trình nào được thực hiện trong quá trình xác thực.

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • Nằm trong vòng tròn dữ liệu: Một vệt dữ liệu, một điều kiện trong đó các gói IP không được phân phối đúng cách qua mạng. Chiến lược phát hành đĩa đơn DataStallReport lớp này sẽ cung cấp thông tin về các quầy dữ liệu đáng ngờ.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • Báo cáo khả năng kết nối: Một ứng dụng đã báo cáo khả năng kết nối qua ConnectivityManager#reportNetworkConnectivity cho hệ thống. Mạng và kết nối đã báo cáo (cho dù ứng dụng cho rằng mạng có hoặc không cung cấp kết nối) được chia sẻ.

Triển khai

Để sử dụng API Chẩn đoán kết nối, ứng dụng phải có ConnectivityDiagnosticsManager từ nền tảng. Thực thể này nên được dùng để đăng ký và huỷ đăng ký ConnectivityDiagnosticsCallback thực tế. Các phương thức gọi lại không bị ghi đè là không hoạt động.

Dưới đây là ví dụ về ConnectivityDiagnosticsCallback triển khai:

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
        ... 
    }
}

Để đăng ký lệnh gọi lại và nhận thông báo, hãy gọi registerConnectivityDiagnosticsCallback. Để huỷ đăng ký các lệnh gọi lại và ngừng nhận thông báo, hãy gọi unregisterConnectivityDiagnosticsCallback.

Dưới đây là ví dụ về cách đăng ký và huỷ đăng ký 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);

Xác nhận kết quả

API Chẩn đoán kết nối được CTS kiểm tra bởi ConnectivityDiagnosticsManagerTest.