7

我想在每个星期一上午09:00点& 05:00 PM重复我的任务。我使用了以下代码,但我无法重复该任务。在Android的每个星期一重复报警usig AlarmManager/BroadcastReceiver

活动代码: -

public class AndroidScheduledActivity extends Activity { 
    /** Called when the activity is first created. */ 
    int id = 115; 
    Intent myIntent; 
    PendingIntent pendingIntent; 
    AlarmManager alarmManager; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button buttonStart = (Button)findViewById(R.id.start); 

     myIntent = new Intent(getBaseContext(), MyScheduledReceiver.class); 
     myIntent.putExtra("id", id); 
     pendingIntent = PendingIntent.getBroadcast(getBaseContext(), id, myIntent, 0); 

     alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 

     buttonStart.setOnClickListener(new Button.OnClickListener(){ 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       setForMonday(); 
       finish(); 
      }}); 
    } 

    public void setForMonday() { 
     Calendar calendar = Calendar.getInstance(); 


     calendar.set(Calendar.DAY_OF_WEEK,2); 
     calendar.set(Calendar.HOUR,09); 
     calendar.set(Calendar.MINUTE, 00); 
     calendar.set(Calendar.SECOND, 0); 
     calendar.set(Calendar.MILLISECOND, 0); 
     System.out.println("Old is [email protected] :== " + calendar.getTime()); 


     long interval = calendar.getTimeInMillis() + 604800000L; 
     System.out.println("Next Millis = " + interval); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent); 
    } 
} 

注: - I计数基于86400000 * 7 = 604800000间隔;

接收器: -

public class MyScheduledReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     System.out.println("Receiver"); 
    } 

} 

如果任何人有任何想法,请好心帮。谢谢

+0

只要尝试,并检查星期一是第2天或1我对怀疑,否则其实我没有看到你的代码要什么问题,可能是它在您的测试,之后设置报警改变你的设备/模拟器时间9AM和下一个星期一的日期......并且我确信会发出警报。 – MKJParekh

+0

我得到了问题。它的间隔。代替间隔我在setRepeating方法中使用了AlarmManager.INTERVAL_DAY * 7。 – Scorpion

回答

12

删除间隔变量,并使用以下代替。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY * 7, pendingIntent); 
+0

如果您需要在星期一至星期五发出警报,如何为setRepeating方法执行此操作? –

+1

然后您可以设置闹钟每天重复,并在当天接收支票。如果它坐或太阳忽视它。 – Vikram