Skip to content

Most visited

Recently visited

navigation

确定和监控连接状态

重复闹铃和后台服务的一些最常见用途是安排定期从互联网资源、缓存数据更新应用数据,或者执行长时间下载。但如果您未连入互联网,或者因连接速度过慢而无法完成下载,何苦要唤醒设备来安排更新呢?

您可以利用 ConnectivityManager 来检查是否已实际连入互联网以及已连入情况下的连接类型。

确定您是否连入了互联网

如果您未连入互联网,则无需安排基于互联网资源的更新。 下面这段代码展示了如何利用 ConnectivityManager 查询活动网络并确定其是否连入了互联网。

ConnectivityManager cm =
        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();

确定您的互联网连接类型

还可以确定当前可用的互联网连接类型。

设备连接可由移动数据、WiMAX、Wi-Fi 和以太网连接提供。如下所示,您可以通过查询活动网络的类型,根据可用带宽改变更新频率。

boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;

移动数据成本往往远高于 Wi-Fi,因此在大多数情况下,使用移动连接时应降低您的应用的更新频率。 同理,您应在接入 Wi-Fi 后再进行大数据量下载。

停用更新后,您必须侦听连接变化,以便在建立互联网连接后立即恢复更新。

监控连接变化

每当连接详情发生变化时,ConnectivityManager 便会广播 CONNECTIVITY_ACTION ("android.net.conn.CONNECTIVITY_CHANGE") 操作。您可以在清单文件中注册一个广播接收器,以便侦听这些变化和相应地恢复(或暂停)后台更新。

<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>

设备的连接变化可能非常频繁—您每次在移动数据与 Wi-Fi 之间切换时都会触发该广播。 因此,最好只在您之前暂停过更新或下载时监控该广播,以便恢复这些更新或下载。通常,只要在开始更新前检查互联网连接即已足够,如果没有任何连接,则再暂停其他更新直至连接恢复。

此技巧需要切换您在清单文件中声明的广播接收器,这方面内容将在下一节课介绍。

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)