使用 AlarmManager/BroadcastReceiver 在 Android 中每周一重复闹钟

Posted

技术标签:

【中文标题】使用 AlarmManager/BroadcastReceiver 在 Android 中每周一重复闹钟【英文标题】:Repeat Alarms on Every Monday in Android using AlarmManager/BroadcastReceiver 【发布时间】:2012-06-25 09:23:55 【问题描述】:

我想在每周一上午 09:00 和下午 05:00 重复我的任务。我为此使用了以下代码,但我无法重复该任务。

活动代码:

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 点和下周一的日期..我相信这会触发警报。 我遇到了问题。它的间隔。我在 setRepeating 方法中使用 AlarmManager.INTERVAL_DAY * 7 代替了间隔。 【参考方案1】:

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

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

【讨论】:

如果需要每周一到周五报警,setRepeating方法怎么做? 然后您设置每天重复的闹钟并在当天接收检查。如果它的星期六或太阳忽略它。

以上是关于使用 AlarmManager/BroadcastReceiver 在 Android 中每周一重复闹钟的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)