尽管时间不同,警报管理器会持续触发

时间:2017-02-15 15:48:08

标签: android

我正在尝试向onStartCommand()中的服务提供待处理的意图。但是一旦设置了警报,它就会持续触发。我在凌晨4点和晚上8点设置两个警报。我希望实现这样的逻辑:当在凌晨4点发出警报意图时,应设置下午8点的警报,并且当下午8点发出警报意图时,应设置凌晨4点的警报。但它出乎意料地工作了。当下午8点意图被传递时,然后在4秒内传递4 AM的意图,其再次设置警报8点并且该周期重复。 我在哪里弄错了?请指导我。

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";
}


}

1 个答案:

答案 0 :(得分:0)

您在现在的同一天设置了4am闹钟。凌晨4点应该设置为第二天.. 例如:今天是星期三,晚上8点触发警报。你应该在星期四凌晨4点设置下一个警报。

在您的日历中添加一天(这也支持月末,这就是您需要做的所有事情。

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