2010-06-29 34 views
9

我想创建一个Android服务,在断开连接和重新连接互联网时通知主要活动。我有以下功能来检查互联网连接:用于检查互联网连接的Android服务?

private boolean haveInternet(){ 
     NetworkInfo info=(NetworkInfo)((ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 

     if(info==null || !info.isConnected()){ 
      return false; 
     } 
     if(info.isRoaming()){ 
      //here is the roaming option you can change it if you want to disable internet while roaming, just return false 
      return true; 
     } 
     return true; 
    } 

但我想知道,如何在服务中使用它。

回答

23

服务是专为长背景运行任务。 您应该使用BroadcastReceiver

这是我用来监视网络状态到我的主要活动的样品的方法:

private void installListener() { 

     if (broadcastReceiver == null) { 

      broadcastReceiver = new BroadcastReceiver() { 

       @Override 
       public void onReceive(Context context, Intent intent) { 

        Bundle extras = intent.getExtras(); 

        NetworkInfo info = (NetworkInfo) extras 
          .getParcelable("networkInfo"); 

        State state = info.getState(); 
        Log.d("InternalBroadcastReceiver", info.toString() + " " 
          + state.toString()); 

        if (state == State.CONNECTED) { 

         onNetworkUp(); 

        } else { 

         onNetworkDown(); 

        } 

       } 
      }; 

      final IntentFilter intentFilter = new IntentFilter(); 
      intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
      registerReceiver(broadcastReceiver, intentFilter); 
     } 
    } 

记得拨打unregisterReceiver时的onDestroy事件发生

希望这帮帮我。

+0

谢谢。这是我正在寻找的。 – Adnan 2010-06-30 06:05:01

+0

绝妙的答案!我喜欢你如何创建一个方法,并添加onNetworkUp和Down回调 – Bhargav 2016-07-18 06:09:54

+0

即时通讯使用这个和伟大的作品,但我希望有一个类或听众。所以我可以在多个活动中使用它,但我想避免代码重复。什么才是正确的方法呢? – 2018-01-27 18:59:22