我有一个相当基本的应用程序,它只有两个活动,即进入 MainActivity 的初始屏幕。我使用 AlarmManager 创建了一个固定时间的通知。现在,我在启动画面期间执行了 AlarmManager。我有两个问题。一:由于AlarmManger在splashActivity中,所以每次启动app都会执行。因此,如果通知时间已过,应用程序会立即发送通知。二:如果通知的时间还没有到,应用程序会崩溃,因为在 MainActivity 中我有一个清除通知的调用,并且由于通知尚未触发,清除通知的调用会导致 MainActivity 崩溃。我知道是明确的通知调用导致 MainActivity 崩溃,因为如果我注释掉调用,应用程序运行良好。
问题:有没有办法对通知进行编码,使其在每次启动应用程序时都不会加载?我可以写清除通知位,这样如果应用程序没有触发它就不会崩溃?这是 Splash Activity 中的通知:
private void launchAlarmManager() {
//---- ALARM MANAGER ------
//---use the AlarmManager to trigger an alarm---
AlarmManager aMan = (AlarmManager) getSystemService(ALARM_SERVICE);
//---get current date and time---
Calendar alCal = Calendar.getInstance();
//---sets the time for the alarm to trigger---
alCal.set(Calendar.HOUR_OF_DAY, 12);
alCal.set(Calendar.MINUTE, 25);
alCal.set(Calendar.SECOND, 00);
//---PendingIntent to launch activity when the alarm triggers---
Intent iDN = new Intent("com.myapp.DISPLAYNOTIFICATIONS");
PendingIntent pendA = PendingIntent.getActivity(this, 0, iDN, 0);
//---sets the alarm to trigger---
aMan.set(AlarmManager.RTC_WAKEUP, alCal.getTimeInMillis(), pendA);
//---- END ALARM MANAGER ------
这是 MainActivity 中的取消通知位:
NotificationManager nm;
//---cancel the notification by getting the Unique ID from the DisplayNotification class---
nm.cancel(getIntent().getExtras().getInt("uID"));