ตรวจสอบสถานะการเชื่อมต่อและการวัดการเชื่อมต่อ
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
ConnectivityManager
มี
API ที่ช่วยให้คุณขอให้อุปกรณ์เชื่อมต่อกับเครือข่ายตาม
เงื่อนไขต่างๆ ซึ่งรวมถึงความสามารถของอุปกรณ์และตัวเลือกการรับส่งข้อมูล
การติดตั้งใช้งานการเรียกกลับจะให้ข้อมูลแก่แอปเกี่ยวกับ
สถานะการเชื่อมต่อของอุปกรณ์ รวมถึงความสามารถของเครือข่ายที่เชื่อมต่อ
อยู่ในปัจจุบัน API ช่วยให้คุณตรวจสอบได้ว่าอุปกรณ์เชื่อมต่อกับเครือข่ายที่ตรงตามข้อกำหนดของแอปอยู่ในขณะนี้หรือไม่
หากต้องการระบุประเภทการรับส่งของเครือข่าย เช่น การเชื่อมต่อ Wi-Fi หรือเครือข่ายมือถือ
และความสามารถของเครือข่ายที่เชื่อมต่ออยู่ในปัจจุบัน เช่น การเชื่อมต่ออินเทอร์เน็ต
คุณต้องกำหนดค่าคำขอเครือข่าย
ประกาศ NetworkRequest
ที่
อธิบายความต้องการการเชื่อมต่อเครือข่ายของแอป โค้ดต่อไปนี้จะสร้างคำขอสำหรับเครือข่ายที่เชื่อมต่ออินเทอร์เน็ตและใช้การเชื่อมต่อ Wi-Fi หรือการเชื่อมต่อเครือข่ายมือถือสำหรับประเภทการรับส่ง
Kotlin
val networkRequest = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build()
Java
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build();
โปรดทราบว่าการเชื่อมต่อบางประเภทอาจมีราคาแพงกว่าประเภทอื่นๆ อย่างมาก (เช่น การเชื่อมต่อผ่านมือถือมักจะมีราคาแพง) ใช้
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
เพื่อพิจารณาว่าการเชื่อมต่อมีค่าใช้จ่ายสูงหรือไม่ เมื่อใช้การเชื่อมต่อแบบคิดตามปริมาณข้อมูล
ให้พยายามลดการใช้ข้อมูลของแอป หรือเลื่อนการใช้ข้อมูลออกไปจนกว่าอุปกรณ์จะมีการเชื่อมต่อ
แบบไม่คิดตามปริมาณข้อมูล
เมื่อลงทะเบียน NetworkRequest
กับ ConnectivityManager
คุณต้อง
ใช้
NetworkCallback
เพื่อรับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงสถานะการเชื่อมต่อและความสามารถของเครือข่าย
ฟังก์ชันที่ใช้กันมากที่สุดใน NetworkCallback
มีดังนี้
onAvailable()
แสดงว่าอุปกรณ์เชื่อมต่อกับเครือข่ายใหม่ที่ตรงตามข้อกำหนดด้านความสามารถและประเภทการรับส่งที่ระบุไว้ใน NetworkRequest
onLost()
แสดงว่าอุปกรณ์ขาดการเชื่อมต่อกับเครือข่าย
onCapabilitiesChanged()
แสดงว่าความสามารถของเครือข่ายมีการเปลี่ยนแปลง ออบเจ็กต์
NetworkCapabilities
ให้ข้อมูลเกี่ยวกับความสามารถปัจจุบันของเครือข่าย
Kotlin
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
// network is available for use
override fun onAvailable(network: Network) {
super.onAvailable(network)
}
// Network capabilities have changed for the network
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities
) {
super.onCapabilitiesChanged(network, networkCapabilities)
val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
}
// lost network connection
override fun onLost(network: Network) {
super.onLost(network)
}
}
Java
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
}
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
}
@Override
public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities);
final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
}
};
ลงทะเบียนเพื่อรับข้อมูลอัปเดตเกี่ยวกับเครือข่าย
หลังจากประกาศ NetworkRequest
และ NetworkCallback
แล้ว ให้ใช้ฟังก์ชัน
requestNetwork()
หรือ registerNetworkCallback()
เพื่อค้นหาเครือข่ายที่จะเชื่อมต่อจากอุปกรณ์ที่ตรงตาม
NetworkRequest
จากนั้นระบบจะรายงานสถานะไปยัง NetworkCallback
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager
connectivityManager.requestNetwork(networkRequest, networkCallback)
Java
ConnectivityManager connectivityManager =
(ConnectivityManager) getSystemService(ConnectivityManager.class);
connectivityManager.requestNetwork(networkRequest, networkCallback);
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-08-21 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-08-21 UTC"],[],[],null,["The [`ConnectivityManager`](/reference/android/net/ConnectivityManager) provides\nan API that enables you to request that the device connect to a network based on\nvarious conditions that include device capabilities and data transport options.\n\nThe callback implementation provides information to your app about the device's\nconnection status as well as the capabilities of the currently connected\nnetwork. The API enables you to determine whether the device is currently\nconnected to a network that satisfies your app's requirements.\n\nConfigure a network request\n\nTo specify the transport type of the network, such as Wi-Fi or cellular\nconnection, and the currently connected network's capabilities, such as internet\nconnection, you must configure a network request.\n\nDeclare a [`NetworkRequest`](/reference/android/net/NetworkRequest) that\ndescribes your app's network connection needs. The following code creates a\nrequest for a network that is connected to the internet and uses either a Wi-Fi\nor cellular connection for the transport type. \n\nKotlin \n\n```kotlin\nval networkRequest = NetworkRequest.Builder()\n .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)\n .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)\n .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)\n .build()\n```\n\nJava \n\n```java\nNetworkRequest networkRequest = new NetworkRequest.Builder()\n .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)\n .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)\n .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)\n .build();\n```\n\nNote that some connections can be significantly more expensive than others (for\nexample, a mobile connection is typically expensive). Use\n[`NetworkCapabilities#NET_CAPABILITY_NOT_METERED`](/reference/android/net/NetworkCapabilities#NET_CAPABILITY_NOT_METERED)\nto determine whether the connection is expensive. When on a metered connection,\ntry to reduce your app's data consumption, or delay it until the device has a\nnon-metered connection.\n\nConfigure a network callback\n\nWhen you register the `NetworkRequest` with the `ConnectivityManager`, you must\nimplement a\n[`NetworkCallback`](/reference/android/net/ConnectivityManager.NetworkCallback)\nto receive notifications about changes in the connection status and network\ncapabilities.\n\nThe most commonly implemented functions in the `NetworkCallback` include the\nfollowing:\n\n- [`onAvailable()`](/reference/android/net/ConnectivityManager.NetworkCallback#onAvailable(android.net.Network)) indicates that the device is connected to a new network that satisfies the capabilities and transport type requirements specified in the `NetworkRequest`.\n- [`onLost()`](/reference/android/net/ConnectivityManager.NetworkCallback#onLost(android.net.Network)) indicates that the device has lost connection to the network.\n- [`onCapabilitiesChanged()`](/reference/android/net/ConnectivityManager.NetworkCallback#onCapabilitiesChanged(android.net.Network,%20android.net.NetworkCapabilities)) indicates that the capabilities of the network have changed. The [`NetworkCapabilities`](/reference/android/net/NetworkCapabilities) object provides information about the current capabilities of the network.\n\nKotlin \n\n```kotlin\nprivate val networkCallback = object : ConnectivityManager.NetworkCallback() {\n // network is available for use\n override fun onAvailable(network: Network) {\n super.onAvailable(network)\n }\n\n // Network capabilities have changed for the network\n override fun onCapabilitiesChanged(\n network: Network,\n networkCapabilities: NetworkCapabilities\n ) {\n super.onCapabilitiesChanged(network, networkCapabilities)\n val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)\n }\n\n // lost network connection\n override fun onLost(network: Network) {\n super.onLost(network)\n }\n}\n```\n\nJava \n\n```java\nprivate ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {\n @Override\n public void onAvailable(@NonNull Network network) {\n super.onAvailable(network);\n }\n\n @Override\n public void onLost(@NonNull Network network) {\n super.onLost(network);\n }\n\n @Override\n public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {\n super.onCapabilitiesChanged(network, networkCapabilities);\n final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);\n }\n};\n```\n\nRegister for network updates\n\nAfter you declare the `NetworkRequest` and `NetworkCallback`, use the\n[`requestNetwork()`](/reference/android/net/ConnectivityManager#requestNetwork(android.net.NetworkRequest,%20android.net.ConnectivityManager.NetworkCallback))\nor [`registerNetworkCallback()`](/reference/android/net/ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,%20android.net.ConnectivityManager.NetworkCallback))\nfunctions to search for a network to connect from the device that satisfies the\n`NetworkRequest`. The status is then reported to the `NetworkCallback`. \n\nKotlin \n\n```kotlin\nval connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager\nconnectivityManager.requestNetwork(networkRequest, networkCallback)\n```\n\nJava \n\n```java\nConnectivityManager connectivityManager =\n (ConnectivityManager) getSystemService(ConnectivityManager.class);\nconnectivityManager.requestNetwork(networkRequest, networkCallback);\n```"]]