Theo dõi trạng thái kết nối và định mức kết nối
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
ConnectivityManager
cung cấp một API cho phép bạn yêu cầu thiết bị kết nối với một mạng dựa trên nhiều điều kiện, bao gồm cả các chức năng của thiết bị và các lựa chọn truyền dữ liệu.
Việc triển khai lệnh gọi lại cung cấp thông tin cho ứng dụng của bạn về trạng thái kết nối của thiết bị cũng như các chức năng của mạng hiện đang kết nối. API này cho phép bạn xác định xem thiết bị hiện có kết nối với mạng đáp ứng các yêu cầu của ứng dụng hay không.
Để chỉ định loại phương tiện truyền tải của mạng, chẳng hạn như kết nối Wi-Fi hoặc di động, cũng như các chức năng của mạng hiện đang kết nối, chẳng hạn như kết nối Internet, bạn phải định cấu hình một yêu cầu mạng.
Khai báo một NetworkRequest
mô tả nhu cầu kết nối mạng của ứng dụng. Đoạn mã sau đây tạo một yêu cầu cho mạng được kết nối với Internet và sử dụng kết nối Wi-Fi hoặc di động cho loại truyền tải.
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();
Xin lưu ý rằng một số kết nối có thể đắt hơn đáng kể so với các kết nối khác (ví dụ: kết nối di động thường tốn kém). Sử dụng NetworkCapabilities#NET_CAPABILITY_NOT_METERED
để xác định xem kết nối có tốn kém hay không. Khi kết nối với mạng có đo lượng dữ liệu, hãy cố gắng giảm mức tiêu thụ dữ liệu của ứng dụng hoặc trì hoãn cho đến khi thiết bị kết nối với mạng không có đo lượng dữ liệu.
Khi đăng ký NetworkRequest
bằng ConnectivityManager
, bạn phải triển khai NetworkCallback
để nhận thông báo về những thay đổi trong trạng thái kết nối và khả năng mạng.
Sau đây là các hàm thường được triển khai nhất trong NetworkCallback
:
onAvailable()
cho biết thiết bị đã kết nối với một mạng mới đáp ứng các yêu cầu về khả năng và loại phương thức truyền tải được chỉ định trong NetworkRequest
.
onLost()
cho biết thiết bị đã mất kết nối với mạng.
onCapabilitiesChanged()
cho biết các tính năng của mạng đã thay đổi. Đối tượng NetworkCapabilities
cung cấp thông tin về các chức năng hiện tại của mạng.
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);
}
};
Đăng ký nhận thông tin cập nhật về mạng
Sau khi bạn khai báo NetworkRequest
và NetworkCallback
, hãy sử dụng các hàm requestNetwork()
hoặc registerNetworkCallback()
để tìm kiếm một mạng cần kết nối từ thiết bị đáp ứng NetworkRequest
. Sau đó, trạng thái sẽ được báo cáo cho 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);
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-08-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-08-27 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```"]]