【问题标题】:Scheduling more than one pendingIntent to same activity using AlarmManager使用 AlarmManager 为同一活动安排多个 pendingIntent
【发布时间】:2012-05-12 05:51:03
【问题描述】:

最近,当我尝试使用 AlarmManager 安排将来运行的活动时,我注意到了奇怪的行为。看下面的代码,第一个活动在 20 秒后开始,而第二个活动在 40 秒内没有开始,而是在 60 秒后才开始。谁能解释为什么第二个意图没有安排第二个活动被调用,而是第三个意图被调用。这是否意味着我在 AlarmManager 中只能有一个活动意图。

//pending intent for morning
    Intent myIntent1 = new Intent(this, Activity1.class);
    pendingIntent1 = PendingIntent.getActivity(this, 0, myIntent1, 0);
    AlarmManager alarmManager1 = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar1 = Calendar.getInstance();
    //calendar1.set(Calendar.YEAR, Calendar.MONTH + 1, Calendar.DAY_OF_MONTH, morningTime, 0, 0);
    calendar1.setTimeInMillis(System.currentTimeMillis());
    calendar1.add(Calendar.SECOND, 20);
    alarmManager1.set(AlarmManager.RTC_WAKEUP, calendar1.getTimeInMillis(), pendingIntent1);

    //pending intent for noon
    Intent myIntent2 = new Intent(this, Activity2.class);
    pendingIntent2 = PendingIntent.getActivity(this, 0, myIntent2, 0);
    AlarmManager alarmManager2 = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar2 = Calendar.getInstance();
    //calendar2.set(Calendar.YEAR, Calendar.MONTH + 1, Calendar.DAY_OF_MONTH, noonTime, 0, 0);
    calendar2.setTimeInMillis(System.currentTimeMillis());
    calendar2.add(Calendar.SECOND, 40);
    alarmManager2.set(AlarmManager.RTC_WAKEUP, calendar2.getTimeInMillis(), pendingIntent2);

    //pending intent for night
    Intent myIntent = new Intent(this, Activity2.class);
    pendingIntent = PendingIntent.getActivity(this, 0, myIntent, 0);
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    //calendar.set(Calendar.YEAR, Calendar.MONTH + 1, Calendar.DAY_OF_MONTH, nightTime, 0, 0);
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 60);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);'

【问题讨论】:

    标签: android android-intent alarmmanager android-calendar android-pendingintent


    【解决方案1】:

    这是否意味着我在 AlarmManager 中只能有一个活动意图。

    不,但这意味着您需要不同的PendingIntents。你在打电话:

    Intent myIntent = new Intent(this, Activity2.class);
    pendingIntent = PendingIntent.getActivity(this, 0, myIntent, 0);
    

    两次,因此两个getActivity() 调用返回相同的PendingIntent

    要么:

    • 对第二个参数使用与getActivity() 不同的值,或者

    • Intent 对象做一些事情以使它们有足够的不同,例如使用不同的操作字符串(注意:额外的还不够)

    【讨论】:

    • 谢谢。这意味着我不能让警报管理器在不同时间启动两个相同的意图?
    • @JehoshaphAkshay:我的第一颗子弹给了你。我的第二个项目符号为您提供了两个 等效 Intents,因为 Intent 对象将具有不同的内容(不同的操作字符串),但不会影响您使用它们的方式。
    猜你喜欢
    • 2023-04-08
    • 2020-05-16
    • 2014-07-28
    • 1970-01-01
    • 2018-06-02
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多