2016-04-27 7 views
2

Ich habe ein Kalenderereignis mit Startdatum als (24-Stunden-Format) 27-Apr-2016 11:00:00 und Enddatum als 29-Apr-2016 11:00:00. Ich habe drei Zeitpunkte 10:45:00, 10:30:00 und 10:15:00 die für die Warnung vor den tatsächlichen eingestellten Zeiten (dh 15 Minuten, 30 Minuten und 45 Minuten) berechnet werden Minuten bis zum Startdatum).Alarm für bestimmte Zeiten in Bezug auf Startdatum und Enddatum eines Ereignisses in Android einstellen

Auch der Alarm muss täglich wiederholt werden, bis das Enddatum erreicht ist.

Hier ist, wie ich versuchte, es zu tun, Wie auch immer die folgenden Code nicht den Alarm nicht aufrufen noch wiederholt sie täglich

Im MainActivity.java

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
Intent intent = new Intent(this, Broadcast.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

Calendar calendar = Calendar.getInstance(); 
calendar.set(2016,03,27,11,00,00); 
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()-(60000*15), pendingIntent); // subtract for 15 mins prior alarm time 
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()-(60000*30), pendingIntent); // subtract for 30 mins prior alarm time 
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()-(60000*45), pendingIntent); // subtract for 45 mins prior alarm time 

Im Sendung. java

Log.i("Alarm", "Alarm Manager is called"); 
Toast.makeText(context, new Date().toString(), Toast.LENGTH_SHORT).show(); 

Wie kann ich das erreichen? Bitte helfen

+0

In BroadCast.java verwenden Sie WakefulBroadcast Recevier @Waseem – Lampard

+0

ja? Es ist eine Klasse zu erweitern BroadcastReceiver @CrazyAndroid –

+0

In diesem Fall fordere ich Sie auf, WakefulBroadcastReceiver zu verlängern, da es garantiert, dass Ihre CPU wach bleibt, bis Sie die completeWakefulIntent auslösen. – Lampard

Antwort

2

Hier ist mein Beispielcode ist, versuchen Sie dies:

Ändern Sie das Datum und die Uhrzeit als Ihre Notwendigkeit in den Code unten.

public static int REPEAT_NOTIFICATION1 = 201; 
    public static int REPEAT_NOTIFICATION2 = 202; 
    public static int REPEAT_NOTIFICATION3 = 203; 

    private void repeatNotification() { 
     final DateTime dateTime1 = DateTime.now(); 
     dateTime1.hourOfDay().setCopy(7); 
     dateTime1.minuteOfHour().setCopy(30); 
     dateTime1.secondOfMinute().setCopy(00); 
     final Calendar calendarNotifiedTime1 = Calendar.getInstance(); 
     calendarNotifiedTime1.set(Calendar.HOUR, dateTime1.getHourOfDay()); 
     calendarNotifiedTime1.set(Calendar.MINUTE, dateTime1.getMinuteOfHour()); 
     calendarNotifiedTime1.set(Calendar.SECOND, dateTime1.getSecondOfMinute()); 
     calendarNotifiedTime1.set(Calendar.AM_PM, Calendar.AM); 

     final DateTime dateTime2 = DateTime.now(); 
     dateTime2.hourOfDay().setCopy(12); 
     dateTime2.minuteOfHour().setCopy(30); 
     dateTime2.secondOfMinute().setCopy(00); 
     final Calendar calendarNotifiedTime2 = Calendar.getInstance(); 
     calendarNotifiedTime2.set(Calendar.HOUR, dateTime2.getHourOfDay()); 
     calendarNotifiedTime2.set(Calendar.MINUTE, dateTime2.getMinuteOfHour()); 
     calendarNotifiedTime2.set(Calendar.SECOND, dateTime2.getSecondOfMinute()); 
     calendarNotifiedTime2.set(Calendar.AM_PM, Calendar.PM); 

     final DateTime dateTime3 = DateTime.now(); 
     dateTime3.hourOfDay().setCopy(6); 
     dateTime3.minuteOfHour().setCopy(30); 
     dateTime3.secondOfMinute().setCopy(00); 
     final Calendar calendarNotifiedTime3 = Calendar.getInstance(); 
     calendarNotifiedTime3.set(Calendar.HOUR, dateTime3.getHourOfDay()); 
     calendarNotifiedTime3.set(Calendar.MINUTE, dateTime3.getMinuteOfHour()); 
     calendarNotifiedTime3.set(Calendar.SECOND, dateTime3.getSecondOfMinute()); 
     calendarNotifiedTime3.set(Calendar.AM_PM, Calendar.PM); 


     Intent intent1 = new Intent(EmptyActivity.this, NotificationReceiver.class); 
     intent1.putExtra(NotificationReceiver.NOTIFICATION_MESSAGE, "Repeat " + dateTime1.getHourOfDay() + ":" + dateTime1.getMinuteOfHour() + ":" + dateTime1.getSecondOfMinute()); 
     Intent intent2 = new Intent(EmptyActivity.this, NotificationReceiver.class); 
     intent2.putExtra(NotificationReceiver.NOTIFICATION_MESSAGE, "Repeat " + dateTime2.getHourOfDay() + ":" + dateTime2.getMinuteOfHour() + ":" + dateTime2.getSecondOfMinute()); 
     Intent intent3 = new Intent(EmptyActivity.this, NotificationReceiver.class); 
     intent3.putExtra(NotificationReceiver.NOTIFICATION_MESSAGE, "Repeat " + dateTime3.getHourOfDay() + ":" + dateTime3.getMinuteOfHour() + ":" + dateTime3.getSecondOfMinute()); 
     PendingIntent pendingIntent1 = PendingIntent.getBroadcast(EmptyActivity.this, REPEAT_NOTIFICATION1, intent3, PendingIntent.FLAG_UPDATE_CURRENT); 
     PendingIntent pendingIntent2 = PendingIntent.getBroadcast(EmptyActivity.this, REPEAT_NOTIFICATION2, intent2, PendingIntent.FLAG_UPDATE_CURRENT); 
     PendingIntent pendingIntent3 = PendingIntent.getBroadcast(EmptyActivity.this, REPEAT_NOTIFICATION3, intent3, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE); 


       cancelNotification(REPEAT_NOTIFICATION1); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendarNotifiedTime1.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent1); 
       cancelNotification(REPEAT_NOTIFICATION2); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendarNotifiedTime2.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent2); 
       cancelNotification(REPEAT_NOTIFICATION3); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendarNotifiedTime3.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent3); 
    } 

Abbrechen Benachrichtigung:

public void cancelNotification(int requestCode) { 
      try { 
       Intent notificationIntent = new Intent(getApplicationContext(), NotificationReceiver.class); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
       AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
       alarmManager.cancel(pendingIntent); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

Rundfunkempfänger:

public class NotificationReceiver extends BroadcastReceiver { 
    public static String NOTIFICATION_MESSAGE = "notificationMessage"; 
    public static int REPEAT_NOTIFICATION1 = 201; 
    public static int REPEAT_NOTIFICATION2 = 202; 
    public static int REPEAT_NOTIFICATION3 = 203; 

    Context context; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     this.context = context; 

     //Assume StartDate = yesterday. 
     DateTime startDate = DateTime.now().minusDays(1); 
     //Assume EndDate = tomorrow 
     DateTime endDate = startDate.plusDays(2); 

     DateTime today = DateTime.now(); 

     if (today.isBefore(endDate) || today.isEqual(endDate)) { 

      String message = intent.getStringExtra(NOTIFICATION_MESSAGE); 
      NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
      //Define sound URI 
      Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

      Intent notificationIntent = new Intent(context, EmptyActivity.class); 
      notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
      final DateTime dateTime = DateTime.now(); 
      int color = 0xffffaa00; 
//  int color1 = context.getColor(R.color.notificatinBackgroundColor); 
      NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
      builder.setSmallIcon(R.drawable.festi_push_message_small); 
      builder.setContentIntent(pendingIntent); 
      builder.setContentTitle("Notification Sample"); 
      builder.setAutoCancel(true); 
      builder.setContentText(message + ", Current Time : " + dateTime.getHourOfDay() + ":" + dateTime.getMinuteOfHour() + ":" + dateTime.getSecondOfMinute()); 
      builder.setSound(soundUri); 
      builder.setLights(Color.RED, 1000, 1000); 
      builder.setColor(color); 

      Notification notification = builder.build(); 

      notification.flags |= Notification.FLAG_AUTO_CANCEL; 

      notificationManager.notify(102938, notification); 
     } else { 
      cancelNotification(REPEAT_NOTIFICATION1); 
      cancelNotification(REPEAT_NOTIFICATION2); 
      cancelNotification(REPEAT_NOTIFICATION3); 
     } 
    } 

    public void cancelNotification(int requestCode) { 
     try { 
      Intent notificationIntent = new Intent(context, NotificationReceiver.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
      alarmManager.cancel(pendingIntent); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

Manifest.xml

<receiver android:name=".NotificationReceiver" /> 
+0

Hallo @Sabir können Sie mir den Code für die DateTime.java zeigen? –

+0

Hi @Sabari Ich habe es mit dem Code versucht, aber ich bekomme keine Benachrichtigung, hilft mir das auch bei der Einstellung von Ereignisalarmen für jedes Ereignis, das ich erstelle? –

+0

Hallo @WaseemAkram, Hier verwende ich Joda DateTime – Sabari