2016-04-16 117 views
0

的每一個第一次我爲每週一,一月月,1日的每1 setRepeating做一個功能,我這樣做,每星期一:alarmManager setRepeating每星期一,每月和1月1日的安卓

GregorianCalendar date = new GregorianCalendar(); 
while(date.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) 
    date.add(Calendar.DATE, 1); 
} 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), 7 * 24 * 60 * 60 * 1000, pendingintentResetAlarms); 

我的問題是,我不知道我每個月的第一天和一月的第一天怎麼辦,因爲每個月都有不同的天數。 我需要創意。

感謝

回答

0

我想你可以像下面這樣做,設置報警過去365天:

GregorianCalendar date = new GregorianCalendar(); 
date.set(Calendar.MONTH, Calendar.JANUARY); 
date.set(Calendar.DAY_OF_MONTH, 1); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), 365 * 24 * 60 * 60 * 1000, pendingintentResetAlarms); 

date.set(Calendar.MONTH, Calendar.FEBRUARY); 
date.set(Calendar.DAY_OF_MONTH, 1); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), 365 * 24 * 60 * 60 * 1000, pendingintentResetAlarms); 
... 

然而,有一個關於有365天或一年366天問題。那麼另一種解決方案是有可能避免這一點,這樣做:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), 24 * 60 * 60 * 1000, pendingintentResetAlarms); 

它觸發報警每一天,在你的廣播接收器,你可以查看當前日:

GregorianCalendar date = new GregorianCalendar(); 
if(date.get(Calendar.DAY_OF_MONTH) == 1) 
    .... 

其實我覺得第二種解決方案是更好,更強大的

+0

感謝您的想法,但FO第二種解決方案,你如何在date.getTimeInmillis()中爲setRepeating配置日期? whit date.set .... ??? – elvega

+0

@ twelvega你可以使用System.currentTimeMillis()來獲得當前時間,而不是 – Pooya

+0

,並檢查是否是星期一或1月1日是?我這樣做:if(date.get(Calendar.DAY_OF_WEEK)== Calendar.MONDAY)或if(date.get(Calendar.DAY_OF_MONTH)== 1 && date.get(Calendar.MONTH)== Calendar.JANUARY)。 ii好嗎? – elvega

0

接收器:

final BasedeDatos bd = new BasedeDatos(context, "DBSesiones", null, 1);//parametros:contexto,nombre base de datos, 
SQLiteDatabase db = bd.getWritableDatabase(); 


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

    Bundle bundle = intent.getExtras(); 
    if (bundle != null) { 
     boolean bRestAlarms = bundle.getBoolean("ReseteaBBDD", false); 
     if (bRestAlarms) { 
      //call your subbroutine here 
      GregorianCalendar date = new GregorianCalendar(); 

      if(date.get(Calendar.DAY_OF_WEEK)==Calendar.MONDAY){ 
       //reseteo tabla semana 
       for(int i=0;i<6;i++) { 
        db.execSQL("UPDATE " + "SesionesSemana" + " SET " + columnas[i] + " = " + 0 + " WHERE " + "_id = 1"); 
       } 
      } if(date.get(Calendar.DAY_OF_MONTH) == 1){//si es primero de mes 
       //reseteo la tabla meses 
       for(int i=0;i<6;i++) { 
        db.execSQL("UPDATE " + "SesionesMes" + " SET " + columnas[i] + " = " + 0 + " WHERE " + "_id = 1"); 
       } 
      } 
      if(date.get(Calendar.DAY_OF_MONTH)==1 && date.get(Calendar.MONTH)==Calendar.JANUARY){ 
       //reseteo la tabla años 
       for(int i=0;i<6;i++) { 
        db.execSQL("UPDATE " + "SesionesAno" + " SET " + columnas[i] + " = " + 0 + " WHERE " + "_id = 1"); 
       } 
      } 
      db.close(); 
     } 
    } 

}` 
+0

@Pooya這是我的接收器 – elvega

相關問題