具有2个待处理意图的报警管理器只有1个工作?

时间:2016-05-31 13:02:43

标签: android alarmmanager

我有2个警报设置,一个用于通知,另一个用于执行某些任务。我的问题是只有一个警报似乎工作(通知服务一,第一个警报集)。其他警报永远不会消失。这是我的代码:

Intent myIntent1 = new Intent(getApplicationContext(), NotificationService.class);
        PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, myIntent1, 0);
        AlarmManager alarmManager1 = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        Calendar calendar1 = Calendar.getInstance();
        calendar1.setTimeInMillis(System.currentTimeMillis());
        long frequency1 = 30 * 1000; // in ms
        alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP, calendar1.getTimeInMillis(), frequency1, pendingIntent);

        // Set alarm to fire go to Next day everyday at the same time
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 14); // For 1 PM or 2 PM
        calendar.set(Calendar.MINUTE, 57);
        calendar.setTimeInMillis(System.currentTimeMillis());
        Intent myintent = new Intent(getApplicationContext(), AlarmNextDayService.class);
        AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        PendingIntent pi = PendingIntent.getService(getApplicationContext(), 11, myintent,0 );
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pi);

欢迎任何建议。到目前为止,我已经查看过其他来源,对我来说没有任何作用。 我还在清单文件中添加了警报permisison,如下所示:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

谢谢

2 个答案:

答案 0 :(得分:1)

obj::get() const

您正在设置HOUR_OF_DAY和MINUTE但是通过调用setTimeInMillis(System.currentTimeMillis())来覆盖它们;

之后,您使用已经过去的calendar.getTimeMillis()值设置闹钟,因此闹钟会被取消。

答案 1 :(得分:1)

您很可能会发现问题,因为由于省电而无法保证在由警报触发时运行Service。如果您的设备处于电池状态并且在该警报响起时处于空闲状态,则在下次设备完全打开或接通交流电源之前,它不会触发。您需要使用BroadcastReceiver来保存唤醒锁,然后Service在完成后释放。 WakefulBroadcastReceiver使这更容易处理。这个article将有助于提供更多详细信息。