2012-07-20 58 views
0
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:檢查互聯網連接的服務內部,並等到互聯網連接建立

回答

0

在我看來實現這種功能的正確方法如下:

  • 如果沒有連接 - 放棄Service,註冊BroadcastReceiver偵聽連接變化和保存標誌的地方(SharedPreferences例如)告知有工作剩下要做
  • 當連接建立後,你的標誌是true - 重新開始Service和做的工作

希望這會有所幫助。

+0

對不起,有點忘了我的問題。那麼,我不能在廣播接收機中再次撥打該服務?但是我只能有一個服務實例,那麼這是否意味着在這個服務完成之前沒有其他FBPosts可以通過?或者我會得到服務泄漏? – Anmol 2012-07-23 21:10:07

+0

@Anmol,如果沒有連接並且無法完成任務,則應該停止服務。沒有進一步運行的感覺。 – Egor 2012-07-24 07:22:00