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
.