0

我遇到了在Android中銷燬通知的問題。 我的應用程序在特定的時間生成一些通知,我想在一段時間後(60秒)自動刪除。 通知由BroadcastReceiver創建,它捕獲由alarmManager創建的廣播,然後從廣播的intent中提取信息並創建通知。 有時候這種方式有效,有時候不行。
我認爲這是因爲android終止某個過程或類似的東西,但我無法在網上找到任何東西。 這裏是我的代碼片段:Android通知不被破壞

Notification notification = mBuilder.build(); 
    notification.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE; 
    notification.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS; 
    final NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(notificationId,notification); 

    Log.d("AlarmReveiver","id della notifica: " + String.valueOf(notificationId)); 

    //cancella la notifica quando l'orario è passato 
    Handler handler = new Handler(); 
    long delay = 60*1000; 
    final int lullo = notificationId; 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Log.d("Handler","id della notifica: " + String.valueOf(lullo)); 
      notificationManager.cancel(lullo); 
     } 
    },delay); 

    notificationId++; 

注意notificationIdstatic int;我猜想我可以使用一個靜態變量來創建迄今爲止創建的通知數量,以避免與通知ID混淆,但是我看到這個計數器在一段時間後被重新初始化爲0。

有沒有人知道一個更好的方式(一種方法,每次工作大聲笑)做到這一點?

在此先感謝

回答

2

您不能假設應用程序將保持常駐狀態。您絕對不能指望應用程序保持足夠長的時間,以便處理程序處理您的消息。這意味着在對BroadcastReceiver的任何兩次調用之間,它可能會丟失所有靜態信息。相反,對於處理程序,請使用AlarmManager警報,並將if取消爲意圖。另外,我恰巧今天發佈了我的Timer類,它簡化了報警處理。退房http://gabesechansoftware.com/timers-in-android/

+0

這就是我所懷疑的。非常感謝,我會看看你的班級並修復一切。 謝謝! – magicleon