我有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"/>
谢谢
答案 0 :(得分:1)
obj::get() const
您正在设置HOUR_OF_DAY和MINUTE但是通过调用setTimeInMillis(System.currentTimeMillis())来覆盖它们;
之后,您使用已经过去的calendar.getTimeMillis()值设置闹钟,因此闹钟会被取消。
答案 1 :(得分:1)
您很可能会发现问题,因为由于省电而无法保证在由警报触发时运行Service
。如果您的设备处于电池状态并且在该警报响起时处于空闲状态,则在下次设备完全打开或接通交流电源之前,它不会触发。您需要使用BroadcastReceiver
来保存唤醒锁,然后Service
在完成后释放。 WakefulBroadcastReceiver
使这更容易处理。这个article将有助于提供更多详细信息。