2017-03-10 3 views
0

Ich benutze Alarm-Manager für API anrufen. Es wird in einer Aktivität onCreate aufgerufen. Ich möchte, dass es beim Start der App einen Alarm gibt und alarmiert alle drei Stunden.AlarmManager wiederholt Anruf auch wenn es nicht Zeit ist

Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY,1); 
    AlarmManager alarmManager1 = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    Intent myIntent1 = new Intent(LobbyActivity.this,WeatherBroadCastReceiverCurrent.class); 
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(this,0,myIntent1,0); 

    alarmManager1.setInexactRepeating(AlarmManager.RTC,calendar.getTimeInMillis(),AlarmManager.INTERVAL_HOUR+ 
      AlarmManager.INTERVAL_HOUR+AlarmManager.INTERVAL_HOUR/*(1000*60*60*3)*/,pendingIntent1); 

Diese Tätigkeit ist dann fertig und geht zu einer anderen Aktivität, wenn eine Schaltfläche geklickt wird. Mein Problem ist - wenn die Aktivität neu erstellt wird, wird ein Alarm ausgelöst, auch wenn es nicht die Zeit ist. Kann ich einen Alarm für eine Nicht-Aktivitätsklasse festlegen, damit er beim Erstellen der Aktivität nicht erneut aufgerufen wird? Wenn das so ist, wie? Tia

Antwort

0

versuchen, durch Entfernen zu starten calendar.set (Calendar.HOUR_OF_DAY, 1); und run, es wird Alarm bei Start der App

+0

danke für die antwort, aber mein problem ist der alarm wird immer ausgelöst, wenn die aktivität, wo ich den alarm erklärte, neu erstellt wird. Was ich brauche ist, nachdem der Alarm eingestellt ist, wird er einmal ausgelöst und alle 3 Stunden aufgerufen. Was passiert, ist, dass es erneut ausgelöst wird, nachdem die Aktivität neu erstellt wurde, auch wenn es nicht an der Zeit ist. – John

+0

Sie können statischen Wert in Preference speichern, um zu überprüfen, ob App zum ersten Mal läuft oder nicht, basierend darauf können Sie Alarm –

+0

ich sehe einstellen. vielen Dank. – John

0

Um einfach darüber zu kommen, müssen Sie ein Flag erstellen und es so wahr machen, dass die Aktivität prüfen kann, ob der Alarm zuvor festgelegt wurde, ist es, dann wird es vorwärts gehen, ohne es einzustellen.

Die Verwendung von SharedPreferences ist dafür ideal. Dies ist eines meiner Snippets, bearbeiten Sie es nach Ihren Bedürfnissen.

SharedPreferences prefs; 
SharedPreferences.Editor ed; 
prefs = PreferenceManager.getDefaultSharedPreferences(this); 
ed = prefs.edit(); 
boolean isOpeningForTheFirstTime = prefs.getBoolean("firstTime", true); 

if(!isOpeningForTheFirstTime) { 
    Intent i = new Intent(this, StartScreen.class); 
    startActivity(i); 
    finish(); 
} 

Und der AlarmManager kann vereinfacht werden, indem ein paar Dinge entfernt werden.

public void setAlarm(){ 

    //To get the current time 
    long alertTime = new GregorianCalendar().getTimeInMillis(); 

    //Interval of a minute 
    int timeInterval = 60000; 

    //Intent which you want to start 
    Intent alertIntent = new Intent(this, ClassName.class); 

    //Declaring the alarmManager 
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

    //Setting the alarmmanager up. 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alertTime, timeInterval, PendingIntent.getBroadcast(this, 1, alertIntent, PendingIntent.FLAG_UPDATE_CURRENT)); 
} 
+0

danke für die Antwort! Es hilft viel Beifall – John

Verwandte Themen