2012-04-06 5 views
-1

Ich muss mehrere Benachrichtigungen zu mehreren Zeiten erstellen. Der Zeitpunkt, zu dem die Benachrichtigung angezeigt werden soll, wird in die Ereignis-ID abgerufen, usw. Die Zeit für die Benachrichtigung wird in einer anderen Klasse festgelegt. Was mit dem unten stehenden Code passiert, ist, dass für eine Benachrichtigung, die beispielsweise auf 10:00 Uhr festgelegt wurde, alle Benachrichtigungen, die nach 10:00 Uhr festgelegt wurden, gleichzeitig angezeigt werden. Bitte helfen Sie. Nur die richtige Benachrichtigung muss angezeigt werden. Nicht die zukünftigen.mehrere Benachrichtigungen zu verschiedenen Zeiten einstellen - Android

 for(int j=0;j<event_id.size();j++) 
         { 
            if(Integer.parseInt(event_id.get(j).toString())>newEventID&&Long.parseLong(event_time.get(j).toString())>System.currentTimeMillis()) 
          { 
           AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);//alarm manager 
           NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
           Notification note=new Notification(R.drawable.friendi_main_logo, event_desc.get(j).toString(), System.currentTimeMillis()); 
           Intent mainScreenIntent=new Intent(getApplicationContext(),MainScreenActivity.class); 
           mainScreenIntent.putExtra("UserID", user_id); 
           int uniqueCode=0; 
           uniqueCode= Integer.parseInt(event_id.get(j).toString());//unique code for each pending intent 
           //separate pending intent for each alarm.. one alarm manager can invoke only one PI 
           PendingIntent ListOfNotification=PendingIntent.getActivity(getApplicationContext(), uniqueCode,mainScreenIntent,0); 
           note.flags=Notification.FLAG_AUTO_CANCEL; 
           alarmManager.set(AlarmManager.RTC_WAKEUP, Long.valueOf(event_time.get(j).toString()), ListOfNotification);//invokes pending intent @ the event_time 
           note.setLatestEventInfo(getApplicationContext(), "Event: "+event_title.get(j).toString(), event_group.get(j).toString()+": "+event_desc.get(j).toString(),ListOfNotification); 
//        Uri path=Uri.parse("android.resource://" + getPackageName() + "/alarm_sms.mp3"); 
//        note.sound=path; 
           note.defaults=Notification.DEFAULT_ALL; 
           notificationManager.notify(EVENT_NOTIFY_ID, note); 
           EVENT_NOTIFY_ID++; 
           flag=true; 
          } 
         } 
+0

Ich denke, das verursacht das Problem; 'event_time.get (j) .toString())> System.currentTimeMillis()'. – Chromium

+0

@Chromium: aber ich kann das nicht entfernen, weil das, wenn ich diese Bedingung entferne, die alle vorher eingestellten Benachrichtigungen auch kommen. Ich will das nicht. – Sherlock

+0

Ich meine nicht, Sie entfernen das. Anstatt nach mehr als zu suchen, können Sie nicht nach Gleichheit suchen? – Chromium

Antwort

0

Also .. was Sie tun, ist ..

if(Integer.parseInt(event_id.get(j).toString())>newEventID&&Long.parseLong(event_time.get(j).toString())>System.currentTimeMillis()) 
    { 

nach dieser Zeile ..

sehen, dass die if-Schleife nicht wieder ... wie dies zum Beispiel eingegeben wird.

.

setzen

j=event_id.size(); 

Dies macht nur eine Benachrichtigung angezeigt ..

+0

doing this gibt mir eine IndexOutOfBoundsException – Sherlock

+0

Setzen Sie diese Zeile nach ... dieser Zeile "flag = true;" in Ihrem Code und versuchen .. – 5hssba

+0

Hat es funktioniert oder immer noch das gleiche Problem? – 5hssba

0

versuchen Sie mit einem Boolean zu überprüfen, nur die erste feuert. mach es wahr wann immer du bereit bist das zweite Feuer zu machen. Sie sind in einer for-Schleife, und Sie rufen notificationManager.notify(EVENT_NOTIFY_ID, note); jedes Mal, damit alle Benachrichtigungen ausgelöst werden.

boolean fire_only_one=true; 
    for(int j=0;j<event_id.size();j++) 
          { 
             if(Integer.parseInt(event_id.get(j).toString())>newEventID&&Long.parseLong(event_time.get(j).toString())>System.currentTimeMillis()) 
           { 
            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);//alarm manager 
            NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
            Notification note=new Notification(R.drawable.friendi_main_logo, event_desc.get(j).toString(), System.currentTimeMillis()); 
            Intent mainScreenIntent=new Intent(getApplicationContext(),MainScreenActivity.class); 
            mainScreenIntent.putExtra("UserID", user_id); 
            int uniqueCode=0; 
            uniqueCode= Integer.parseInt(event_id.get(j).toString());//unique code for each pending intent 
            //separate pending intent for each alarm.. one alarm manager can invoke only one PI 
            PendingIntent ListOfNotification=PendingIntent.getActivity(getApplicationContext(), uniqueCode,mainScreenIntent,0); 
            note.flags=Notification.FLAG_AUTO_CANCEL; 
            alarmManager.set(AlarmManager.RTC_WAKEUP, Long.valueOf(event_time.get(j).toString()), ListOfNotification);//invokes pending intent @ the event_time 
            note.setLatestEventInfo(getApplicationContext(), "Event: "+event_title.get(j).toString(), event_group.get(j).toString()+": "+event_desc.get(j).toString(),ListOfNotification); 
    //        Uri path=Uri.parse("android.resource://" + getPackageName() + "/alarm_sms.mp3"); 
    //        note.sound=path; 
            note.defaults=Notification.DEFAULT_ALL; 
    if(fire_only_one){         
    notificationManager.notify(EVENT_NOTIFY_ID, note); 
    fire_only_one=false; 
    }     
        EVENT_NOTIFY_ID++; 
            flag=true; 
           } 
          } 


    fire_only_one=true; 

Auch können Sie die Logik ändern nur die relevanteste Benachrichtigung durch das Setzen und wenn der Benutzer eine Aktivität öffnet sich durch die erste Benachrichtigung klicken, stellen Sie die zweite Meldung ALARM Manager.

+0

alle Benachrichtigungen (für die zukünftigen Ereignisse) werden gefeuert. ZB: Event1 10:00 Uhr Event2 10:05 Uhr. Um 10:00 Uhr werden beide Benachrichtigungen für Event1 und Event2 ausgelöst. Um 10:05 Uhr wird nur Event2 ausgelöst. – Sherlock

Verwandte Themen