2012-04-06 3 views
-1

Мне нужно создать несколько уведомлений в несколько раз. Время, когда должно появиться уведомление, вызывается в event_id и т. Д. Время для уведомления устанавливается в другом классе. Что происходит с приведенным ниже кодом, для уведомления, установленного, например, 10:00, все уведомления, установленные после 10:00, также отображаются одновременно. Пожалуйста помоги. Должно появиться только правильное уведомление. Не будущие.установка нескольких уведомлений в разное время - 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

Я думаю, что это вызывает проблему; 'Event_time.get (к) .ToString())> System.currentTimeMillis()'. – Chromium

+0

@Chromium: но я не могу удалить это, потому что, если я удалю это условие, все ранее установленные уведомления тоже появятся. Я этого не хочу. – Sherlock

+0

Я не имею в виду, вы удаляете это. Вместо проверки на большее, не можете ли вы проверить равенство? – Chromium

ответ

0

Так .. что вы делаете ..

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

после этой строки ..

видеть, что если цикл не вводится снова ... , например, как это. .

поставил

j=event_id.size(); 

это приводит к появлению только одного уведомления.

+0

Выполнение этого дает мне IndexOutOfBoundsException – Sherlock

+0

Положите эту строку после ... этой строки "flag = true;" в вашем коде и попробуйте .. – 5hssba

+0

Это работало? Или еще одна проблема? – 5hssba

0

попробуйте использовать логическое значение для проверки только первого пожара. сделайте это истинным, когда вы готовы уволить второй. вы находитесь в цикле for, и вы вызываете notificationManager.notify(EVENT_NOTIFY_ID, note); каждый раз, поэтому все уведомления будут запущены.

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; 

Также Вы можете изменить логику, установив только наиболее соответствующее уведомление здесь, и когда пользователь открывает активность, нажав на первое уведомление, установите второе уведомление с помощью диспетчера ALARM.

+0

все уведомления (для будущих событий) увольняются. Например: Event1 10:00 Event2 10:05. В 10:00, оба, события Event1 и Event2 увольняются В 10:05, только Event2 уволен. – Sherlock

Смежные вопросы