2011-12-04 111 views
2

嗨我是新來的android和我正在開發提醒,有三個類別的第一個是設置多個約會提醒和第二個多月(票據)提醒,第三個多個每日(醫藥)提醒都在同一個項目中。android多個通知

所有的工作正常,但我有一個問題,當我設置三個提醒,他們都出現在LogCat上,所有時間都會觸發,但問題是當醫藥通知出現在酒吧通知和帳單提醒後, ,該賬單通知將取代滑下通知中的現有藥物提醒,反之亦然。約會提醒通知工作正常。

我需要通知所有三個類別的下滑通知,而不是用另一個替換現有的。

所以我認爲問題是在通知的代碼,但我無法弄清楚我的代碼中有什麼問題。

我對每個類別都有單獨的提醒服務。有人可以看看它,並告訴我什麼問題是?

這是服藥服務

public class Medicines_ReminderService extends WakeReminderIntentService { 

    public Medicines_ReminderService() { 
     super("ReminderService"); 
      } 

    @Override 
    void doReminderWork(Intent intent) { 
     Log.d("MedicinesReminderService", "Doing work."); 
     Long rowId = intent.getExtras().getLong(RemindersDbAdapter.KEY_ROWID_MEDS); 

     NotificationManager mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 

     Intent notificationIntent = new Intent(this, MedicinesEdit.class); 
     notificationIntent.putExtra(RemindersDbAdapter.KEY_ROWID_MEDS, rowId); 
     int N_Med_requestCode = rowId.intValue(); 
     PendingIntent pi = PendingIntent.getActivity(this, N_Med_requestCode, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT); 



     Notification note=new Notification(android.R.drawable.stat_sys_warning, getString(R.string.notify_new_reminder_message), System.currentTimeMillis()); 
     note.setLatestEventInfo(this, getString(R.string.notify_new_medicine_reminder_title), getString(R.string.notify_new_reminder_message), pi); 
     note.defaults |= Notification.DEFAULT_SOUND; 
     note.flags |= Notification.FLAG_AUTO_CANCEL; 

     int id = (int)((long)rowId); 
     mgr.notify(id, note); 


    } 
} 

這是該法案提醒服務

public class Bills_ReminderService extends WakeReminderIntentService { 

    public Bills_ReminderService() { 
     super("ReminderService"); 
      } 


    @Override 
    void doReminderWork(Intent intent) { 
     Log.d("BillsReminderService", "Doing work."); 
     Long rowId = intent.getExtras().getLong(RemindersDbAdapter.KEY_ROWID_BILLS);  

     NotificationManager mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 

     Intent notificationIntent = new Intent(this, BillsEdit.class); 
     notificationIntent.putExtra(RemindersDbAdapter.KEY_ROWID_BILLS, rowId); 
     int N_Bill_requestCode = rowId.intValue(); 
     PendingIntent pi = PendingIntent.getActivity(this, N_Bill_requestCode, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT); 

     Notification note=new Notification(android.R.drawable.stat_sys_warning, getString(R.string.notify_new_reminder_message), System.currentTimeMillis()); 
     note.setLatestEventInfo(this, getString(R.string.notify_new_bill_reminder_title), getString(R.string.notify_new_reminder_message), pi); 
     note.defaults |= Notification.DEFAULT_SOUND; 
     note.flags |= Notification.FLAG_AUTO_CANCEL; 

     int id = (int)((long)rowId); 
     mgr.notify(id, note); 



    } 
} 

在此先感謝

最好的問候, zoza

回答

4

您正在使用行ID作爲它的「唯一」標識符在你擁有的3項服務中,並不是唯一的。

int id = (int)((long)rowId); 
    mgr.notify(id, note); 

從文檔在http://developer.android.com/guide/topics/ui/notifiers/notifications.html

管理您的通知「的ID唯一從你的應用程序中標識的通知。該ID是必要的,如果你需要更新的通知或(如果您的應用程序管理不同類型的通知)當用戶通過通知中定義的意圖返回到您的應用程序時,請選擇適當的操作。「

如果你只需要一個通知每個類別中,你可以使用:

int BillsID=1; 
    int MedsID=2; 

    mgr.notify(BillsID, note); 
    mgr.notify(MedsID, note); 

,或者如果你真的需要每個通知是基於它的行號,你需要添加一個微分避免同ID被分配給單獨的通知。

int BillsID=100000; 
    int MedsID=200000; 
    mgr.notify(BillsID+RowID, note); 
    mgr.notify(MedsID+RowID, note);