2016-07-05 82 views
0

我有两个报警1.步行提醒2.提示通知 用户可以取消,步行提醒。取消过程工作正常。检查报警管理器是否设置为假阳性

private void setWalkReminder(){ 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, 18); 
    calendar.set(Calendar.MINUTE, 50); 
    calendar.set(Calendar.SECOND, 0); 
    Intent walkIntent = new Intent(this, AlarmReceiver.class); 
    Log.d(TAG, "Started WALK SET"); 
    walkIntent.putExtra("alarmType", "walkReminder"); 
    PendingIntent walkPendingIntent = PendingIntent.getBroadcast(this, WALK_REMINDER, walkIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager walkAlarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE); 
    walkAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 180000 /*AlarmManager.INTERVAL_DAY*/, walkPendingIntent); 

    workoutEditor = workoutPrefs.edit(); 
    workoutEditor.putBoolean("walkReminderIsSet", true); 
    workoutEditor.commit(); 
} 

private void cancelWalkReminder(){ 
    Intent walkIntent = new Intent(this, AlarmReceiver.class); 
    PendingIntent walkPendingIntent = PendingIntent.getBroadcast(this, WALK_REMINDER, walkIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    Log.d(TAG, "Walk Canceled"); 
    AlarmManager walkAlarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE); 
    walkAlarmManager.cancel(walkPendingIntent); 
} 

我检查报警是否通过以下方法设置:

boolean walkAlarmDown = (PendingIntent.getBroadcast(this, WALK_REMINDER, 
      new Intent(this, AlarmReceiver.class), PendingIntent.FLAG_NO_CREATE) == null); 

    if (walkAlarmDown && workoutPrefs.getBoolean("walkReminderIsNeeded", true)){ 
     Log.d(TAG, "WALK REMINDER SET"); 
     setWalkReminder(); 
    } else if (!walkAlarmDown && !workoutPrefs.getBoolean("walkReminderIsNeeded", true)){ 
     Log.d(TAG, "WALK REMINDER CANCELED"); 
     cancelWalkReminder(); 
    } else { 
     if(!workoutPrefs.getBoolean("walkReminderIsNeeded", true) && walkAlarmDown){ 
      Log.d(TAG, "Why is this false?"); 
     } else if (!walkAlarmDown && workoutPrefs.getBoolean("walkReminderIsNeeded", true)){ 
      Log.d(TAG, "proper functioning"); 
     } 
} 

如果用户重新启用它被取消后,再提醒不会再次设置提醒。 Log.d输出是proper functioning。这是因为walkAlarmDown仍然给出错误。我相信这是因为当警报被取消时,walkAlarmDown没有成为真实。如何确保walkAlarmDown应该在报警取消时变为真?

这是因为我的其他警报启用了吗?因此,只有一个警报被取消,另一个警报保持活动状态。它有不同的广播请求代码。所以我认为这不应该是一个问题。

回答

0

即使警报管理器被取消,walkPendingIntent仍然处于活动状态。代码walkAlarmManager.cancel(walkPendingIntent);后面应跟着walkPendingIntent.cancel()。现在walkAlarmDown取消警报后会显示为真。