在Android中如何使用AlarmManager/BroadcastReceiver每周一重复设置闹钟?

7
我希望您能在每个星期一的早上9点和下午5点重复我的任务。我使用了以下代码,但是无法重复任务。
活动代码:
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 set@ :== " + calendar.getTime());


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

注意:我根据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");
    }
}

只需尝试并检查星期一是第2天还是第1天,我对此表示怀疑,否则实际上我在您的代码中没有看到太多问题,可能是在您的测试中,设置此警报后将设备/模拟器时间更改为上午9点和下周一的日期...那将会触发警报,我敢肯定。 - MKJParekh
我遇到了问题。它在时间间隔上。在setRepeating方法中,我使用了AlarmManager.INTERVAL_DAY * 7代替时间间隔。 - Scorpion
1个回答

12

删除区间变量并使用以下内容替代。

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

如果您需要在每个周一到周五都进行提醒,该如何使用setRepeating方法实现? - Kairi San
1
然后您需要设置每天重复的闹钟,并在接收时检查当前日期。如果是周六或周日,请忽略它。 - Vikram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接