2017-02-15 2 views
0

Ich versuche ausstehende Absicht an einen Dienst in onStartCommand() zu liefern. Sobald der Alarm eingestellt ist, wird er kontinuierlich ausgelöst. Ich stelle zwei Alarme um 4 Uhr morgens und um 20 Uhr ein. Ich wollte Logik erreichen, so dass, wenn die Absicht für einen Alarm um 4 Uhr morgens ausgegeben wird, ein Alarm für 8 Uhr eingestellt werden sollte und wenn die Absicht für einen Alarm um 8 Uhr ausgegeben wird, sollte ein Alarm für 4 Uhr eingestellt werden. Aber es funktioniert unerwartet. Wenn 8 PM Absicht geliefert wird, dann wird in 4 Sekunden die Absicht für 4 AM geliefert, die wiederum Alarm für 8 PM setzt, und dieser Zyklus wiederholt sich. Wo mache ich Fehler? Bitte führen Sie mich.Alarm-Manager löst fortwährend aus, obwohl die Zeit anders ist

public class Alarmclass extends Service { 
@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

private String Stat; 

private boolean GetTypeofAlarm() { 
    Log.e("Getting type", "Getting alarm types"); 
    boolean alarmtype = false; 
    int hours; 
    Calendar c = Calendar.getInstance(); 
    hours = c.get(Calendar.HOUR_OF_DAY); 
    if (hours <= 5) { 
     alarmtype = false; 
    } else if (hours >= 20) { 
     alarmtype = false; 
    } else if (hours >= 5 && hours <= 20) 
     alarmtype = true; 
    return alarmtype; 
} 


@Override 
public void onCreate() { 
    super.onCreate(); 

    if (!GetTypeofAlarm()) { 
     StartLocAlarm(); 
    }else{ 
     StopLocAlarm(); 
    } 
    } 

    @Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    if (intent.hasExtra("START")) {    

    if(intent.getStringExtra("START").equals("START_ALR")) { 
      StopLocAlarm(); 
     } 
    }else if(intent.hasExtra("STOP")){ 
     if(intent.getStringExtra("STOP").equals("STOP_ALR")) { 
     StartLocAlarm(); 
    } 
    } 

    Intent Actint = new Intent(this, Startup_Activity.class); 
    Actint.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 2422, Actint, 0); 

    Notification notification = new NotificationCompat.Builder(this) 
      .setContentTitle("Admin") 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentIntent(pendingIntent) 
      .setContentText(Stat) 
      .setOngoing(true).build(); 
    startForeground(201, notification); 

    return START_STICKY; 
} 

private void StartLocAlarm(){ 

    AlarmManager alrmMgr; 
    PendingIntent alarmIntent; 

    Calendar c = Calendar.getInstance(); 
    c.setTimeInMillis(System.currentTimeMillis()); 
    c.set(Calendar.HOUR_OF_DAY, 4); 
    alrmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, Alarmclass.class); 
    intent.putExtra("START", "START_ALR"); 
    alarmIntent = PendingIntent.getService(this, 0, intent, 0); 


    alrmMgr.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),alarmIntent); 
    Log.e("In onstart","Setting alarm at 5 AM"); 
    Stat = "Alarm set for 5 AM"; 

} 

private void StopLocAlarm(){ 

    AlarmManager alarmMgr; 
    PendingIntent alarmIntent; 

    Calendar c = Calendar.getInstance(); 
    c.setTimeInMillis(System.currentTimeMillis()); 
    c.set(Calendar.HOUR_OF_DAY, 20); 
    alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
    Intent intent2 = new Intent(this, Alarmclass.class); 
    intent2.putExtra("STOP", "STOP_ALR"); 
    alarmIntent = PendingIntent.getService(this, 1, intent2, 0); 

    alarmMgr.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), alarmIntent); 
    Log.e("In onstart", "Setting alarm at 8 PM"); 
    Stat = "Alarm set for 8 PM"; 
} 


} 

Antwort

0

Sie setzen den 4-Uhr-Alarm an dem Tag, an dem Sie sich gerade befinden. 4 Uhr sollte auf den nächsten Tag eingestellt sein. Zum Beispiel: Heute ist Mittwoch, um 20 Uhr wird der Alarm ausgelöst. Der nächste Alarm sollte donnerstags um 4 Uhr morgens eingestellt werden.

hinzufügen Tag in Ihrem Kalender (dies auch das Ende des Monats unterstützt, so das ist alles, was Sie tun müssen.

c.add(Calendar.DAY_OF_MONTH, 1); //Adding 1 day 
+0

Seine immer noch kontinuierlich Radfahren. –

+0

Ich verstehe nicht ... tun Sie möchten nur, wenn Ihr Benutzer auf die Benachrichtigung drückt und dann den nächsten Alarm einstellt? – Dus

+0

Nein Ich möchte, dass der Alarm automatisch ohne Benutzerinteraktion eingestellt wird. –

Verwandte Themen