監控連線狀態和連線計量功能
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
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
判斷連線是否昂貴。使用計量付費連線時,請盡量減少應用程式的數據用量,或等到裝置連上非計量付費連線再執行。
向 ConnectivityManager
註冊 NetworkRequest
時,您必須實作 NetworkCallback
,才能接收連線狀態和網路功能變更的通知。
NetworkCallback
最常實作的函式包括:
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 (世界標準時間)。
[[["容易理解","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 (世界標準時間)。"],[],[],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```"]]