我想提供定时通知(每天早上5点),并尝试使用AlarmManager执行此操作,并使用以下代码:
Intent appIntent = new Intent(this, NotificationService.class);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent penIntent = PendingIntent.getService(this, 0,
appIntent, 0);
alarmManager.cancel(penIntent);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 5);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 00);
alarmManager.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, penIntent);
NotificationService.class看起来(至少是重要的部分)如下:
int id = 001;
NotificationManager mNotifyMng = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
MainActivity.this).setSmallIcon(R.drawable.icon).setContentTitle("Test")
.setContentText("Test!");
mNotifyMng.notify(id, mBuilder.build());
stopSelf();
我似乎无法让它发挥作用。当我将模拟器时钟设置为4:59或等等并等待它变为5:00时,没有显示任何通知,我无法想出另一种方法来测试它。 我希望你知道一些方法来测试它或在我的代码中找到错误。
答案 0 :(得分:0)
我认为问题在于您取消了PendingIntent
,但在设置alarmManager
之前需要重新创建它。
//cancel pendingIntent
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent penIntent = PendingIntent.getService(this, 0,appIntent, 0);
alarmManager.cancel(penIntent);
//reset pendingIntent
Intent appIntent = new Intent(this, NotificationService.class);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
PendingIntent penIntent = PendingIntent.getService(this, 0,appIntent, 0);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 5);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 00);
alarmManager.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, penIntent);
要取消PendingIntent
,您需要完全按照第一次的方式创建它,然后按原样拨打AlarmManager
s cancel()
。但是,您需要再次创建它以在PendingIntent
**我希望你知道一些测试方法...
可能有更好的方法,但出于测试目的,我有时会设置一个全局调试标志,它将改变测试和生产之间的时间。所以说4小时可能是2分钟。一天中的时间可能会有点棘手,但您可以将时间更改为任何小时,分钟或任何接近的时间。一旦你知道它在正确的时间触发,那么你可以将它改回来并在一天中的那个时间到来时仍然进行测试,但你现在知道它应该正常工作。