2016-02-29 62 views
0

我有一個TimerTask對象timerTask。我的代碼正在運行,但最初服務啓動時,我的計時器任務會在指定時間即下午3:30之前立即運行,但我希望它僅在每天的下午3:30運行一次。安排一個TimerTask在特定時間每天一次在一個服務在Android

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.AM_PM, Calendar.PM); 
cal.set(Calendar.HOUR, 3);  
cal.set(Calendar.MINUTE, 30); 
cal.set(Calendar.SECOND, 0); 
Date date = cal.getTime(); 
timer.schedule(timerTask, date, 1000*60*60*24); // once per day 
+0

不*使用'TimerTask'來做這個。你的過程將在一天之前終止。使用'AlarmManager'。 – CommonsWare

+0

但是我正在動態改變指定的時間並從數據庫中獲取它,當我的警報管理器開始進行活動時,如何獲得新時間。 – zeeali

回答

1

至於其他社區用戶建議,不要使用TimerTask的,androidAlarmManager

,您可以使用。

如何?

  1. 註冊報警經理廣播接收器,還有覆蓋(當alamr被激發做什麼)
  2. 設置要執行日常的間隔和時間報警的onReceive方法。

這裏摘錄如實施例:

public class MainActivity extends Activity { 
private static final String TAG ="MainActivity"; 
PendingIntent myPendingIntent; 
AlarmManager alarmManager; 
BroadcastReceiver myBroadcastReceiver; 
Calendar firingCal; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //Register AlarmManager Broadcast receive. 
    firingCal= Calendar.getInstance(); 
    firingCal.set(Calendar.HOUR, 8); // At the hour you want to fire the alarm 
    firingCal.set(Calendar.MINUTE, 0); // alarm minute 
    firingCal.set(Calendar.SECOND, 0); // and alarm second 
    long intendedTime = firingCal.getTimeInMillis(); 

    registerMyAlarmBroadcast(); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, intendedTime , AlarmManager.INTERVAL_DAY , myPendingIntent); 
} 

private void registerMyAlarmBroadcast() 
{ 
     Log.i(TAG, "Going to register Intent.RegisterAlramBroadcast"); 

    //This is the call back function(BroadcastReceiver) which will be call when your 
    //alarm time will reached. 
    myBroadcastReceiver = new BroadcastReceiver() 
    { 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      Log.i(TAG,"BroadcastReceiver::OnReceive()"); 
      Toast.makeText(context, "Your Alarm is there", Toast.LENGTH_LONG).show(); 
     } 
    }; 

    registerReceiver(myBroadcastReceiver, new IntentFilter("com.alarm.example")); 
    myPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent("com.alarm.example"),0); 
    alarmManager = (AlarmManager)(this.getSystemService(Context.ALARM_SERVICE)); 
} 
private void UnregisterAlarmBroadcast() 
{ 
    alarmManager.cancel(myPendingIntent); 
    getBaseContext().unregisterReceiver(myBroadcastReceiver); 
} 

@Override 
protected void onDestroy() { 
    unregisterReceiver(myBroadcastReceiver); 
    super.onDestroy(); 
} 
} 

編輯:

如果能在App取決於用戶輸入動態地改變的時間,那麼就改日曆燒製可調整時間的變量。

+0

但時間不固定,它在我的應用程序中動態變化。 – zeeali

+0

@ZeeshanAliSayyed,確定tnxs的澄清,我更新了答案 –

+0

非常感謝@Xoce – zeeali

相關問題