2014-06-18 50 views
0

我有这个静态辅助功能,设定每日重复的报警:澄清对AlarmManager的行为

public static void setAlarm(Context context, int hh, int mm) 
{ 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, hh); 
    calendar.set(Calendar.MINUTE, mm); 

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent intentAlarm = new Intent(context, AlarmReciever.class); 
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intentAlarm, 0); 

    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); 
} 

我有三个地方,这个辅助函数被调用:

  1. 当设备启动时,我想重新注册闹钟:

    @Override 
    public void onReceive(Context context, Intent intent) { 
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { 
         setAlarm(context, 7, 00); 
        } 
    } 
    
  2. 在我的一项活动中,c所有这ActivityA:

    AlarmReciever.setAlarm(ActivityA.this, 7, 00);

  3. 在另一个活动,称之为ActivityB:

    AlarmReciever.setAlarm(ActivityB.this, 7, 00);

问题:

  1. 会发生什么,如果所有这三种setAlarm()被调用?我担心他们没有相同的背景。将Android知道他们是相同的PendingIntent,只有一次火灾?我希望它只在上午7点发射一次。

  2. 如果我在ActivityA中按下setAlarm按钮几次,所以相同的警报设置具有相同的上下文和意图,如果上午7点到来,有多少人会触发?

  3. 说今天早上7点解雇了,现在是下午2点。我现在按下ActivityA中的按钮。警报会立即触发(测试),因为上午7点是“过去的时间”。但在添加新警报之前,系统不应该检查现有警报,并意识到这是一个重复的意图,并且已经在早上7点发射了一个。在我看来,它应该忽略我在下午2点要求的setAlarm()。

回答

0

对于它的价值,我做过实验,我张贴在这里的结果的情况下,任何人都奇观:只要PendingIntent是相同

  1. ,机器人才会触发报警一旦。无论您想要什么活动/课程,您都可以多次设置闹钟。

  2. 一。

  3. 新的警报只会触发正确的方式(因为上午7点是“过去的时间”)。你可以编写代码来记录上次被触发的日期/时间(例如使用SharedPreferences),并在那里做一些逻辑,或者取决于你的情况,你可能想要安排闹钟在第二天早上7点发射(做一个加号一天的Calendar对象)。