Android alarmmanager取消并开始无法正常工作

时间:2015-04-09 23:48:25

标签: android alarmmanager

我有以下代码在主要活动开始时设置闹钟并在退出时取消

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...

    // Schedule alarm
    Intent intent = new Intent(this, MyReceiver.class);
    alarmIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    if (PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_NO_CREATE) == null) {
        alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 0, AlarmManager.INTERVAL_DAY, alarmIntent);
    }
}

private void logOut() {
    if (alarmManager != null) {
        alarmIntent.cancel();
        alarmManager.cancel(alarmIntent);
    }

    Intent i = new Intent(MainActivity.this, LoginActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(i);

    finish();
}

但是当我退出时,请重新登录,然后输入主要活动,永远不会到达代码alarmManager.setInexactRepeating()

2 个答案:

答案 0 :(得分:0)

永远不会达到该行,因为您正在检查的PendingIntent将始终存在,因为您之前正在创建PendingIntent两行。由于PendingIntent存在,FLAG_NO_CREATE调用仍会返回,并且不会等于null

答案 1 :(得分:0)

那是因为你的if语句的计算结果为false。根据您的代码,每次点击if块时,您都会有一个PendingIntent实例与该请求。