2011-12-26 41 views
3

Hai我的應用程序是通過NetConnection保存(到服務器)數據。如果網絡不可用我保存在本地,然後當淨可用再次發送到服務器。我的問題是檢查因特網連接Frequetly。所以我試了服務功能檢查網絡連接。但它只叫一次。如何解決我的問題。任何人善意幫助我 在此先感謝!在Android中檢查Internet連接是否經常可用?

更新

package com.android.cdtech; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.ConnectivityManager; 
import android.view.View; 

class ReceiverName extends Activity { 
    BroadcastReceiver r = new BroadcastReceiver(){ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     ConnectivityManager cm = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)); 
     if (cm == null) 
      return; 
     if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()) { 
      saveData(); 
     } else { 
      // Do nothing or notify user somehow 
     } 

    } 
    // code to handle broadcase 

    private void saveData() { 
     final saveData dh=new saveData(this); //Class for Creating a Database 
     webService calService=new webService(); 
     dh.open(); 
     Cursor c = dh.pay(); 

     String text = ""; 
     do { 
      text = text + " " + "\n" + c.getString(4); 
      System.out.println(c.getCount()); 
      // Toast.makeText(this,"Name:" +c.getString(1)+c.getString(2)+c.getString(3)+c.getString(4)+"",Toast.LENGTH_LONG).show(); 
      calService.paymentReceipt("PaymentReceipt", c.getString(1), c.getString(2), c.getString(3), c.getString(4), "gf", "0"); 
     } 
     while (c.moveToNext()); 
     dh.close(); 
     } 
    }; 
} 
+0

什麼是例外。請分享日誌 – 2011-12-26 07:55:15

回答

0

你應該寫在TimerTask的,而不是服務的代碼,因爲在OnCreate()將在整個服務生命週期只執行一次。

mTimerTask = new TimerTask() { 

    @Override 
    public void run() { 

     ConnectivityManager conMgr = (ConnectivityManager) getSystemService  (Context.CONNECTIVITY_SERVICE); 
     if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected()) { 
      Toast.makeText(this, "net Started", Toast.LENGTH_LONG).show(); 
      saveData(); 
     } 

    } 
}; 

//檢查每5秒的互聯網連接

mTimer = new Timer(); 
mTimer.scheduleAtFixedRate(mTimerTask,1000,5000); 
+0

C我的更新Sujit,它出現異常(空指針異常) – Mercy 2011-12-26 07:49:27

+0

總是使用廣播接收器或服務來檢查後臺互聯網是否正在運行。 – jack 2015-05-18 10:57:57

13

你可以做到這一點沒有任何計時器,只登記接收器收聽連接的變化:

<receiver android:name=".ReceiverName" > 
    <intent-filter > 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

,並檢查是否連接成立:

public class ReceiverName extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ConnectivityManager cm = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)); 
     if (cm == null) 
      return; 
     if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()) { 
      // Send here 
     } else { 
      // Do nothing or notify user somehow 
     } 

    } 
} 
+1

final saveData dh = new saveData(this);如果我擴展BroadcastReceiver,則無法在此傳遞上下文。 – Mercy 2011-12-26 08:48:05

+0

我想'this'是'Activity'的實例嗎?你通過什麼活動?通常'Context'就足夠了。 – Jin35 2011-12-26 09:29:46

+0

構造函數saveData(new BroadcastReceiver(){})未定義,我得到這樣的錯誤,先生。再次我更新我的代碼先生 – Mercy 2011-12-26 09:49:55