2016-02-29 78 views
0
Calendar calendar = Calendar.getInstance(); 

      calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // Tue, Wed... 
      calendar.set(Calendar.HOUR_OF_DAY, 1); 
      calendar.set(Calendar.MINUTE, 0); 
      calendar.set(Calendar.SECOND, 0); 
      PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context,MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT); 
      AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
      am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 7*24*60*60*1000, pi); 

这一周将闪光一次重复在周一,但: 我想设置报警意向未决只在工作日(不含周六,周日),如何只用一个意图办呢? 我不想使用5个不同的PendingIntents与5个不同的ID,因为那么我必须取消5报警仅在工作日

回答

1

可能:

创建setAlarm方法:

public void setAlarm(long interval){ 
    Calendar calendar = Calendar.getInstance(); 

    //Alarm will go off at 1 
    calendar.set(Calendar.HOUR_OF_DAY, 1); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.SECOND, 0); 

    PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context,MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pi); 
} 

创建cancelAlarm方法(可选,如果你想在某个地方使用它) :

public void cancelAlarm(Context context){ 
    PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context,MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    am.cancel(pi); 
} 

检查当天在onReceive()

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

    Calendar calendar = Calendar.getInstance(); 
    int day = calendar.get(Calendar.DAY_OF_WEEK); //Sunday = 1, Saterday = 7 
    switch(day){ 

     case 6: //Friday 
      long interval = 3*24*60*60*1000 //skip saterday and sunday 
      setAlarm(interval); 

     case 2: //Monday 
      setAlarm(AlarmManager.INTERVAL_DAY); //Alarm will repeat everyday, until friday 
     break; 
} 

PS:不要忘了使用的地方设置闹钟为第一时间:setAlarm(AlarmManager.INTERVAL_DAY);

我认为这应该工作。

1

将日历设置为多个日期是不可能的,因此您无法按照自己的喜好进行操作。

我建议你做的事情是每天重复闹钟,并在onReceive中检查它是哪一天,如果是星期六/星期日就马上回来,不要做任何事情。

Calendar calendar = Calendar.getInstance(); 

calendar.set(Calendar.HOUR_OF_DAY, 1); 
calendar.set(Calendar.MINUTE, 0); 
calendar.set(Calendar.SECOND, 0); 
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, MyClass.class), 0); 
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24 * 60 * 60 * 1000, pi); 

接收机

public class MyClass extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (today == sunday || today == saturday) { 
      return; 
     } 

     // do normal stuff. 
    } 
} 
+0

谢谢,会试试这个方法,看起来很简单:) –