2016-11-19 6 views
0

ich einen Android-Alarm App machen und Alarmeinstellung mithilfe von Code unter:Alarmmanager nicht auslösen aktuelle Zeit

Calendar alarm = Calendar.getInstance(); 
alarm.set(Calendar.YEAR, year1); 
alarm.set(Calendar.MONTH, month1); 
alarm.set(Calendar.DAY_OF_MONTH, day1); 
alarm.set(Calendar.HOUR_OF_DAY, hour1); 
alarm.set(Calendar.MINUTE, min1); 
alarm.set(Calendar.SECOND, 0); 

if(alarm.before(Calendar.getInstance())) 
{ 
    alarm.add(Calendar.DATE, 1); 
    Toast.makeText(getActivity(),"You selected the past time",Toast.LENGTH_SHORT).show(); 
} 
else 
{   
    Intent myIntent = new Intent(getActivity(), MyReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); 
    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC, alarm.getTimeInMillis(), pendingIntent); 
} 

Alles funktioniert gut, aber das Problem ist, wenn ich das aktuelle Datum wählen, Monat, Jahr und auch die Aktuelle Uhrzeit wird angezeigt "Sie haben die vergangene Zeit ausgewählt". Wie man dieses Problem löst?

+0

Sie tun die richtigen Sachen, sind Sie sicher, dass die Variablen, year1, month1, etc, korrekt sind? – GiuseppeLabanca

+0

@GiuseppeLabanca Yup, ich benutze den Toast zur Anzeige und es wird korrekt angezeigt. Ich verstehe nicht, warum es "Sie ausgewählt ..." anzeigen wird, wenn ich die aktuelle Zeit und auch das aktuelle Datum –

+1

auswähle Ich denke es wegen der Tatsache, dass, bis der Code die 'if'-Anweisung erreicht, einige Zeit verstrichen ist. Zumindest im Bereich von Millisekunden. Daher möchten Sie möglicherweise ein anderes Kalenderobjekt für 'rightNow' verwenden, das zusammen mit' alarm' initialisiert wird und das verwendet, um das Innere von if zu vergleichen. – Marat

Antwort

0

Versuchen Sie es. Hoffe, dass es dein Problem lösen wird.

Calendar alarm = Calendar.getInstance(); 
Calendar copy = (Calendar) alarm.clone(); 

alarm.set(Calendar.YEAR, year1); 
alarm.set(Calendar.MONTH, month1); 
alarm.set(Calendar.DAY_OF_MONTH, day1); 
alarm.set(Calendar.HOUR_OF_DAY, hour1); 
alarm.set(Calendar.MINUTE, min1); 

int result = alarm.compareTo(copy); 

if (result == 0) 
{ 
    Toast.makeText(getActivity(), "You selected current time", Toast.LENGTH_SHORT).show(); 
} 
else if (result < 0) 
{ 
    alarm.add(Calendar.DATE, 1); 
    Toast.makeText(getActivity(), "You selected the past time", Toast.LENGTH_SHORT).show(); 
} 
else 
{   
    Intent myIntent = new Intent(getActivity(), MyReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); 
    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC, alarm.getTimeInMillis(), pendingIntent); 
} 
+0

Was bedeutet 'result == 0' und' result <0'? Ich habe Ihren Code ausprobiert, aber es wird weiterhin "Sie haben die vergangene Zeit ausgewählt" angezeigt. –

+0

Ich habe die Antwort editiert. Ich habe die Zeile gelöscht, in der Sie "Sekunden" des "Alarms" eingestellt haben. Jetzt sollte es funktionieren. Wenn 'alarm' gleich' copy' ist, dann wird result auf 0 gesetzt. Wenn es vorher ist, dann wird das Ergebnis auf eine Zahl kleiner als 0 gesetzt. Wenn es nach dem Ergebnis größer als 0 ist – Marat

+0

Danke. Da ich den Alarm die aktuelle Uhrzeit und das aktuelle Datum ausführen lassen möchte, kann ich das 'result == 0' entfernen und einfach schreiben, wenn' (result <0) ', else' {} '? –