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
ไปยังระบบ เครือข่ายและการเชื่อมต่อที่รายงาน (ไม่ว่าแอปจะเชื่อว่าเครือข่ายมีหรือไม่มีการเชื่อมต่อก็ตาม) จะถูกแชร์
การนำไปปฏิบัติ
หากต้องการใช้ Connectivity Diagnostics 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);
การตรวจสอบ
Connectivity Diagnostics API ได้รับการทดสอบ CTS โดย ConnectivityDiagnosticsManagerTest