检查我的应用程序中的互联网连接

4

我正在开发基于互联网的应用,因此需要监控网络连接。链接

我在MainActivity的onCreate中使用了这段代码检查我的网络连接,它运行良好。

public boolean isOnline() 
{  
ConnectivityManager cm = (ConnectivityManager) 
getSystemService(Context.CONNECTIVITY_SERVICE);  return 
cm.getActiveNetworkInfo().isConnectedOrConnecting();
}

但我希望这种监控应该贯穿整个应用程序。我应该在哪里使用它?需要任何AsyncTask吗?

2个回答

6
创建一个广播接收器来检测连接状态的变化。查看Eric在 这里 的回答。

谢谢Josephus。你的意思是BroadcastReceiver会在后台不断检查网络连接,对吗? - shanmugamgsn
哦,太好了...Eric的回答很好。但是我该如何启动这个广播接收器,也就是onRevieve方法?如果我有一个切换按钮来开关广播接收器呢? - shanmugamgsn
如果连接没有断开,但在某些不太发达的国家,GPRS 常常会卡住。广播会返回什么?或者我们应该使用超时吗? - Skynet
@NunChai 是的,处理这个问题的唯一方法是使用一些超时机制。具体实现取决于你使用的库,可以在另一个问题线程中回答。 - josephus
谢谢您的评论,对我非常有价值! - Skynet
显示剩余4条评论

4
使用广播接收器,像这样:
private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
                        boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);

            NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
            NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);

            // do application-specific task(s) based on the current network state, such 
            // as enabling queuing of HTTP requests when currentNetworkInfo is connected etc.
        }
    };

 private void registerReceivers() {    
       registerReceiver(mConnReceiver, 
           new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
   }

谢谢Reno。但我需要知道使用广播接收器是否高效,因为它通过不断检查而耗尽电池?或者在哪种应用程序中使用此广播接收器,有任何示例吗? - shanmugamgsn
@Reno 这是垃圾信息,请勿点击。 - Shivam Sharma
@ShivamSharma 那个博客/网址已经过期,所以我已经将其删除。至于这个答案,目前在N OS中为了节省电力,连接更改广播不会在后台完成。 - Reno
@Reno 好的.. 谢谢 - Shivam Sharma

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