安卓警报管理器取消并开始不工作



我有以下代码,用于在主活动启动时设置警报,并在退出时取消警报

@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()永远不会到达。

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

这是因为if语句的计算结果为false。根据您的代码,每次命中if块时,您都会有一个带有该请求的PendingIntent实例。

相关内容

最新更新