Android通知问题

时间:2012-04-24 21:17:11

标签: android notificationmanager

我有一个相当基本的应用程序,它只有两个活动,即进入MainActivity的启动画面。我已经使用AlarmManager创建了一个固定时间的通知。现在我在启动画面中执行AlarmManager。我有两个问题。 一个:由于AlarmManger位于启动活动中,因此每次启动应用时都会执行。因此,如果通知的时间过去,应用程序会立即发送通知。 两个:如果尚未发出通知的时间,则应用程序崩溃,因为在MainActivity中我有一个清除通知的调用,并且由于通知尚未解除,清除通知的调用会导致MainActivity崩溃。我知道明确的通知调用会导致MainActivity崩溃,因为如果我对该调用发表评论,该应用运行正常。

问题:有没有办法对通知进行编码,以便每次启动应用时都不会加载?我可以清楚地写下通知位,这样如果它没有被解雇,它就不会崩溃吗?这是Splash活动中的通知:

    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"));

1 个答案:

答案 0 :(得分:1)

我想你需要保存警报是否已经设置的状态。在伪代码中:

load the alarm_has_been_set variable
if( !alarm_has_been_set ) {
    set alarm
    save alarm_has_been_set = true
}

然后,一旦警报触发,您就取消设置该变量。有关保存和加载的信息,请参阅Making data persistent in Android

关于取消通知时遇到崩溃的第二个问题,请尝试使用try-catch块:

try {
    nm.cancel(getIntent().getExtras().getInt("uID"));
} catch (Exception e) {
    System.out.println("Error when cancelling: "+e.toString());
}

另外,我刚注意到,至少你的示例代码会产生NullPointerException,因为你根本没有初始化NotificationManager类。