如何测试定时通知?或者我的代码有点不对劲?

时间:2013-03-26 18:25:38

标签: android android-notifications

我想提供定时通知(每天早上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时,没有显示任何通知,我无法想出另一种方法来测试它。 我希望你知道一些方法来测试它或在我的代码中找到错误。

1 个答案:

答案 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分钟。一天中的时间可能会有点棘手,但您可以将时间更改为任何小时,分钟或任何接近的时间。一旦你知道它在正确的时间触发,那么你可以将它改回来并在一天中的那个时间到来时仍然进行测试,但你现在知道它应该正常工作。