2016-11-19 2 views
0

Ich arbeite an Wecker App. Ich habe mit einem Problem konfrontiert. Ich weiß nicht, wie ich den Alarm für mehrere Tage einstellen soll. Ich habe bereits den Code, der unten ist, aber in Log gesehen Ich sah diese Wed Apr 06 (hat kein Datum geändert, so dass es sollte am nächsten Dienstag und Freitag sein). Was mache ich falsch? Kann ich Alarm für jeden zweiten Tag separat einstellen?Alarm für mehrere Tage einstellen

Dies ist mein Code:

calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY, Calendar.FRIDAY); 
       //calendar.add(Calendar.DAY_OF_WEEK,Calendar.FRIDAY); 
       Log.e("Point_1","Calendar " + calendar.getTime()); 
       calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour()); 
       calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute()); 
       Intent intent1 = new Intent(MyService_alarm.this,MyReceiver_Alarm.class); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(MyService_alarm.this,intent.getIntExtra("Size", 1),intent1,0); 
       AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
       alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent); 

Danke.

Antwort

0

Das liegt daran, dass Sie sich die Zeit anmelden, bevor Sie die Stunde und Minuten von den Zeit-Picker Einstellung

Code si arbeitet gut, aber die Zeit anzuzeigen, die Sie den Alarm in Ihrem Protokoll eingestellt wurden haben sie zu bewegen die Log.e zu, nachdem Sie den Kalender auf die Stunde und Minute aus dem Picker so eingestellt, sollte der Code wie folgt aussehen:

calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY, Calendar.FRIDAY); 
      //calendar.add(Calendar.DAY_OF_WEEK,Calendar.FRIDAY); 
      calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour()); 
      calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute()); 
      Log.e("Point_1","Calendar " + calendar.getTime()); 
      Intent intent1 = new Intent(MyService_alarm.this,MyReceiver_Alarm.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(MyService_alarm.this,intent.getIntExtra("Size", 1),intent1,0); 
      AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
      alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent); 

auch da Sie mehrere Tage einen Alarm für machen wäre es klug, den ganzen Satz zu speichern Alarme und einen Empfänger hinzufügen, um zu erkennen, wann das Gerät gebootet wurde, da Ihre Alarme auf r abgebrochen wurden eboot und muss erneut hinzugefügt werden.

+0

Vielen Dank für Ihre Antwort. Leider kann ich meinen Wecker nicht für mehrere Tage gleichzeitig einstellen. – Steve

+1

was meinst du einen Alarm für mehrere Tage? Ich verstehe nicht, was Sie erreichen wollen. Möchten Sie einen Alarm für mehrere Tage einstellen? Wenn ja, müssen Sie für jeden Tag separat einen Alarm einstellen –

+0

Also kann ich nicht einfach Calendar.add (Calendar.DAY_OF_WEEK, Calendar.FRIDAY) und Calendar.add (Calendar.DAY_OF_WEEK, Calendar.SUNDAY) hinzufügen, um Alarme für zu setzen heutzutage? – Steve

0

Die Linie

calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY, Calendar.FRIDAY); 

ist nicht korrekt. Wenn Sie sich die documentation anschauen, werden Sie sehen, dass es keine solche Methode gibt.

Indem Sie Calendar.DAY_OF_WEEK schreiben, sagen Sie dem System, dass Sie einen Wert als Wochentag eingeben. Aber statt eines bestimmten Tages treten Sie zwei ein. Calendar Objekt wird verwendet, um ein bestimmtes Datum zu speichern.

Um die Alarme für mehrere Tage einzustellen, müssen Sie daher jeden der Alarme separat einstellen. Aus diesem Grund können Sie separate Calendar Objekte erstellen oder eines durch Ändern der Zeit wiederverwenden. Sie haben jedoch die gleiche Empfängerklasse für beide Alarme. Daher müssen Sie verschiedene ausstehende Absichten erstellen, damit der Alarmmanager sie unterscheiden kann. Aus diesem Grund habe ich Ihnen das Beispiel mit verschiedenen request_code gezeigt.

calendar1.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); 
calendar2.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 

calendar1.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour()); 
calendar1.set(Calendar.MINUTE, timePicker.getCurrentMinute()); 

calendar2.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour()); 
calendar2.set(Calendar.MINUTE, timePicker.getCurrentMinute()); 

Intent intent1 = new Intent(MyService_alarm.this, MyReceiver_Alarm.class); 
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(MyService_alarm.this, 1, intent1, 0); 
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(MyService_alarm.this, 2, intent1, 0); 

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.setRepeating(AlarmManager.RTC, calendar1.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent1); 
alarmManager.setRepeating(AlarmManager.RTC, calendar2.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent2); 
Verwandte Themen