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ư ứng dụng của nhà cung cấp dịch vụ, ứng dụng VPN và ứng dụng đề xuất Wi-Fi, nhận thông tin kết nối mạng chẩn đoán từ khung. Các ứng dụng này có thể đăng ký cuộc gọi lại và nhận thông báo kèm theo thông tin kết nối cho các mạng mà chúng sở hữu hoặc quản lý. Ứng dụng sẽ không nhận được thông báo cho các 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à cung cấp dịch vụ: Quản lý các mạng di động mà subId của họ có đặc quyền của nhà cung cấp dịch vụ
  • Ứng dụng gợi ý Wi-Fi: Sở hữu mạng Wi-Fi mà chúng đề xuất cho hệ thống
  • Ứng dụng VPN: Quản lý tất cả các mạng mà VPN của họ sử dụng, nhưng chỉ khi chúng là VPN hoạt động

Cuộc gọi lại được gọi trong các trường hợp sau:

  • Xác thực mạng: Hệ thống đã hoàn tất việc đánh giá một mạng cụ thể. Lớp ConnectivityReport 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 mọi thử nghiệm hoặc quy trình được thực hiện như một phần của quá trình xác thực.

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • Nghi ngờ gian hàng dữ liệu: Bị nghi ngờ là gian hàng dữ liệu, một tình trạng trong đó các gói IP không truyền qua mạng đúng cách. Lớp DataStallReport cung cấp thông tin về các gian hàng dữ liệu bị nghi ngờ.

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

Thực hiện

Để sử dụng API Chẩn đoán kết nối, ứng dụng phải có phiên bản ConnectivityDiagnosticsManager từ nền tảng. Phiên bản này nên được sử dụng để đăng ký và hủy đăng ký triển khai ConnectivityDiagnosticsCallback . 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ề triển khai 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
        ... 
    }
}

Để đăng ký cuộc gọi lại và nhận thông báo, hãy gọi registerConnectivityDiagnosticsCallback . Để hủy đăng ký cuộc 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ề đăng ký và hủy đă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);

Thẩm định

API Chẩn đoán kết nối là CTS do ConnectivityDiagnosticsManagerTest kiểm tra.