2016-08-20 3 views
1

Ich erstelle eine einfache Zeit Picker Dialog und wenn Benutzer Zeit einstellen Ich speichere diese Zeit in einer Kalender-Instanz.Time Picker Unterschied zwischen aktuellen und Time Picker Time Android Alarm

public void onTimeSet(TimePicker timePicker, int i, int i1) 
{ 
    tpCalendar = Calendar.getInstance(); 
    tpCalendar.set(Calendar.HOUR_OF_DAY, i); 
    tpCalendar.set(Calendar.MINUTE, i1); 
    tpCalendar.set(Calendar.SECOND,0); 
    updateReminder(); 
} 

Und Berechnung Unterschied in updateReminder() -Methode

private void updateReminder() 
{ 
    long currTime = System.currentTimeMillis(); 
    long diff = tpCalendar.getTimeInMillis() - currTime; 
    long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diff); 

    Intent reminderIntent = new Intent(this, ReminderReceiver.class); 
     AlarmManager alarmManager = (AlarmManager)  getSystemService(Context.ALARM_SERVICE); 

    alarmManager.set(AlarmManager.RTC_WAKEUP, diff, 
      PendingIntent.getBroadcast(this, 1, reminderIntent, 
      PendingIntent.FLAG_UPDATE_CURRENT)); 
} 

Und bassed auf Unterschied, den ich einen Alarm setze. Ich bekomme einen korrekten Unterschied in Millis (Diff-Variable). Das Problem ist jedoch, dass nach dem Einstellen des Alarms und unabhängig davon, welcher Unterschied eingestellt ist, dies nach 5 Sekunden gemeldet wird.

In Rundfunkempfängern ich nur eine Benachrichtigung erstellen. Ich werde jede Hilfe zu schätzen wissen, Danke.

Antwort

2

ich tat so etwas wie, wenn ich meinen Alarmclock gemacht (nach TimePicked):

String[] arrTime = time.split(":"); 
int hour = Integer.parseInt(arrTime[0]); 
    int minute = Integer.parseInt(arrTime[1]); 
    GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.getInstance(); 
    calendar.set(GregorianCalendar.DATE, calendar.get(GregorianCalendar.DATE)); 
    calendar.set(GregorianCalendar.HOUR_OF_DAY, hour); 
    calendar.set(GregorianCalendar.MINUTE, minute); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MILLISECOND, 0); 

    Intent intent = new Intent(this, AlarmReceiver.class); 
    intent.putExtra("message", message); 
    PendingIntent pIntent = PendingIntent.getBroadcast(this, requestCode, intent, 0); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent); 
+0

Also nur Sie neue Zeit auf Kalender und es Alarmmanager übergeben? –

+0

ja, nur ausgewählte Zeit ist auf Alarm-Manager eingestellt –

+0

ok, ich dachte, Sie müssen die Differenz zwischen zwei Mal übergeben. Danke, es hat funktioniert. –