如何在安卓系统中监控网络连接状态?

29

我有一个从服务器下载文件的服务。在下载开始之前,我告诫用户仅通过无线局域网下载文件。

我的问题是,如果我失去网络连接,我的下载会卡住。是否有一种方法可以监听网络连接的变化或完全丢失?

1个回答

80

监听CONNECTIVITY_ACTION

这段代码看起来像是个不错的样例代码。以下是其中一段片段:

BroadcastReceiver networkStateReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.w("Network Listener", "Network Type Changed");
    }
};

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);        
registerReceiver(networkStateReceiver, filter);

我添加了一个匿名广播接收器,只是为了使示例更加清晰明了。谢谢你的回答。 - Janusz
我可以用networkStateReceiver和filter对象做什么?请展示更多细节...! - Zin Win Htet
1
当活动/片段销毁/暂停时,请不要忘记注销接收器。 - Gil Julio
1
在这个例子中要小心并发问题:尽管startListening()stopListnening()方法本身是同步的,但它们彼此之间不是同步的。如果有两个线程独立地调用这些函数,那么可能会出现竞争条件。您需要添加一个锁对象,并从两个方法都进行同步处理。 - racs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接