我正在構建一個android應用程序,運行時我需要在每分鐘撥打我的web服務器,如果用戶連接到某個網絡。android在運行應用程序時不時在後臺運行服務
我打算使用一項服務來打這個電話,但是我怎麼在每分鐘打電話呢? 我想我需要使用alaarm管理器,但我在哪裏初始化它?在我的開始活動?我只需要在我的應用運行時執行服務。
感謝您的幫助。
我正在構建一個android應用程序,運行時我需要在每分鐘撥打我的web服務器,如果用戶連接到某個網絡。android在運行應用程序時不時在後臺運行服務
我打算使用一項服務來打這個電話,但是我怎麼在每分鐘打電話呢? 我想我需要使用alaarm管理器,但我在哪裏初始化它?在我的開始活動?我只需要在我的應用運行時執行服務。
感謝您的幫助。
如果只想在應用程序運行時調用服務器,則不需要使用警報管理器。還有其他選項,如
CoundDownTimer
主題
我在那種情況下喜歡CoundownTimer,你可以使用這樣
CountDownTimer countDownTimer = new CountDownTimer(1000000, 60 * 1000) {
@Override
public void onTick(long millisUntilFinished) {
// Do something on a tick.
}
@Override
public void onFinish() {
// Do something, maybe?
this.start();
}
};
countDownTimer.start();
呼叫使用AsynTask http://developer.android.com/reference/android/os/AsyncTask.html
在你的Web服務器onPost方法Asyn任務類等待一分鐘,然後調用AsynTask。
您可以通過使用下面的代碼調用AsynTask:
BLSyncingProcedure objSyncingProcedure=new BLSyncingProcedure();
objSyncingProcedure.execute(HomeScreen.this);
BLSyncingProcedure是你AsynTask類名。
試試這個::
您可以致電此計時器在你的活動,你想讓它
private Timer autoUpdate;
@Override
public void onResume() {
super.onResume();
autoUpdate = new Timer();
autoUpdate.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
//call your service from here
}
});
}
}, 0, 60000);//set time interval according to your requirement
}
隨意問,如果你有任何疑問:)
:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TestAlarmMessageReceiver almesr = new TestAlarmMessageReceiver(this, time);
}
BroadcastReceiver:
public class TestAlarmMessageReceiver extends BroadcastReceiver {
public TestAlarmMessageReceiver() {
}
public TestAlarmMessageReceiver(Context context, int timeout) { //timeout in seconds
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, TestAlarmMessageReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(),
timeout*60*1000, pendingIntent);
}
@Override
public void onReceive(Context arg0, Intent arg1) {
arg0.startService(new Intent(arg0, TestMessageService.class));
}
}
服務:
public class TestMessageService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
messageUpdateTask();
return super.onStartCommand(intent, flags, startId);
}
private void messageUpdateTask(){
GetMessagesUpdateAsyncTak getMessUpd = new GetMessagesUpdateAsyncTak();
getMessUpd.execute(this);
}
}
我已經測試你的代碼,它看起來像它會做我想做的。謝謝。在接受你的接受者之前,我會再等一會兒。 – brpaz
多數民衆贊成不要忘記接受 –
和如果我做了一個單獨的類爲http調用2小時的時間間隔後發送數據到服務器。 ?我不想在任何活動中執行此操作。 –