Android:检查互联网连接的服务内部,并等到互联网连接建立

问题描述:

public class FBPost extends Service{ 

     private Bundle params = new Bundle(); 
     private String userID=""; 

     String response; 

     public void onCreate(String userID,String name) 
     { 
      super.onCreate(); 
      params.putString("message", "Test " + new Date().toLocaleString()); 
      params.putString("caption", "Hey there"); 
      this.userID=userID; 
     } 


     @Override 
     public int onStartCommand(Intent intent , int flags , int startId) 
     { 
      if(checkInternetConnection()) 
      { 
       fb_post(); 
      return 0; 
      } 
      else 
      { 
       BroadcastReceiver connec_recv= new BroadcastReceiver() { 

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

         if(checkInternetConnection()) 
          fb_post(); 
         } 
       }; 

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

     @Override 
     public IBinder onBind(Intent arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     private boolean checkInternetConnection() { 
       ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

       // test for connection 
       if (cm.getActiveNetworkInfo() != null 
         && cm.getActiveNetworkInfo().isAvailable() 
         && cm.getActiveNetworkInfo().isConnected()) { 
        try{ 
          URL url = new URL("http://www.google.com"); 
          BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
          in.close(); 
          return true; 
         } catch (Exception e) { 
          return false; 
         } 
       } 
        return false; 
      } 

     private void fb_post() 
     { 
      //MORE CODE 
     } 


} 

如果仍然没有互联网连接性,该怎么办?我应该从广播接收者而不是fb_post()调用另一个相同服务的实例吗?每当连接广播接收器收到连接更改广播时,是否可以等待服务(),然后通知()?Android:检查互联网连接的服务内部,并等到互联网连接建立

在我看来实现这种功能的正确方法如下:

  • 如果没有连接 - 放弃Service,注册BroadcastReceiver侦听连接变化和保存标志的地方(SharedPreferences例如)告知有工作剩下要做
  • 当连接建立后,你的标志是true - 重新开始Service和做的工作

希望这会有所帮助。

+0

对不起,有点忘了我的问题。那么,我不能在广播接收机中再次拨打该服务?但是我只能有一个服务实例,那么这是否意味着在这个服务完成之前没有其他FBPosts可以通过?或者我会得到服务泄漏? – Anmol 2012-07-23 21:10:07

+0

@Anmol,如果没有连接并且无法完成任务,则应该停止服务。没有进一步运行的感觉。 – Egor 2012-07-24 07:22:00