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.