2016-04-08 7 views
0

ich auf Ersteinrichtung senden Probleme mit meinem app habe, dass beim ersten Start i einrichten möchten eine alarmintent und ich möchte, dass die Alarmmanager mir eine Meldung alle 24 h bei einem bestimmten Zeitpunkt zu senden. Alles daran funktioniert, außer wenn ich die App zum ersten Mal starte (wenn Daten von der App gelöscht werden), dann wird sofort eine Benachrichtigung gesendet, die es nicht tun sollte, bis die Uhr 09 das nächste Mal kommt: 00. HierAlarmmanager wird

ist die Funktion, dass das Setup der Alarm (nur das erste Mal genannt die App läuft)

public void setAlarm(){ 
    Toast.makeText(this, "setAlarm()", Toast.LENGTH_LONG).show(); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, 9); 
    calendar.set(Calendar.MINUTE, 0); 
    calendar.set(Calendar.SECOND, 0); 

    Intent alarmIntent = new Intent(this, AlertReceiver.class); 

    if(PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_ONE_SHOT) != null){ 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
    } 
} 

Und hier ist die Benachrichtigungsfunktion des Rundfunkempfängers

public void createNotification(Context context, String msg, String msgText, String msgAlert){ 
    PendingIntent notificIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context); 
    mBuilder.setSmallIcon(R.drawable.ic_stat_dmq_notification_icon); 
    mBuilder.setTicker(msgAlert); //Ticker! 
    mBuilder.setWhen(System.currentTimeMillis()); 
    mBuilder.setContentTitle(msg); //Title: 
    mBuilder.setContentText(msgText); //Text 
    mBuilder.setContentIntent(notificIntent); 
    mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND); 
    mBuilder.setAutoCancel(true); 

    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(uniqueId, mBuilder.build()); 

Ich habe Ich schaue mir das seit Tagen an, und ich kann es anscheinend nicht herausfinden, noch kann ich eine Lösung finden. Wenn jemand helfen kann, wäre ich ein glücklicher Mann!

+1

keine Notwendigkeit calendar.setTimeInMillis (System.currentTimeMillis() zu nennen;. – peter

+0

Ja, du hast recht, aber da es nicht mein Fehler erwartet änderte –

Antwort

0

Okay, ich schaffe es immerhin, um herauszufinden. Das Einzige, was benötigt hinzugefügt wird, war nach allen den calendar.set

if(calendar.getTimeInMillis() < System.currentTimeMillis()){ 
      Toast.makeText(this,"1 day have been added", Toast.LENGTH_SHORT).show(); 
      calendar.add(Calendar.DATE, 1); 
} 

war es im Grunde überprüft nur zu sehen, wenn die Zeit, in der Vergangenheit war, und wenn es ist, dann fügt sie an einen anderen Tag, so Der Alarm wird am nächsten Tag ausgelöst.

1

Ist es nach 9 Uhr in Ihrer Gegend. Das könnte die Ursache Ihres Fehlers sein. Ein Alarm, der in der Vergangenheit in Android eingestellt wurde, wird sofort ausgelöst. Versuchen:

calendar.set(Calendar.YEAR, 2017); 

Insane nur zum Testen

+0

Sie haben Recht, wird der Alarm nicht gehen dann. –