Android alarmmanager 取消并开始不工作
Android alarmmanager cancel and start not working
我有以下代码可以在主 activity 启动时设置警报并在注销时取消
@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();
}
但是当我注销、重新登录并输入主 activity 时,代码 alarmManager.setInexactRepeating()
永远不会到达。
永远不会到达该行,因为您正在检查的 PendingIntent
将始终存在,因为您在两行之前创建了 PendingIntent
。由于 PendingIntent
存在,FLAG_NO_CREATE
调用仍将 return 它,并且不等于 null
.
那是因为您的 if 语句计算结果为 false。根据您的代码,每次您点击 if 块时,您都会有一个带有该请求的 PendingIntent 实例。
我有以下代码可以在主 activity 启动时设置警报并在注销时取消
@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();
}
但是当我注销、重新登录并输入主 activity 时,代码 alarmManager.setInexactRepeating()
永远不会到达。
永远不会到达该行,因为您正在检查的 PendingIntent
将始终存在,因为您在两行之前创建了 PendingIntent
。由于 PendingIntent
存在,FLAG_NO_CREATE
调用仍将 return 它,并且不等于 null
.
那是因为您的 if 语句计算结果为 false。根据您的代码,每次您点击 if 块时,您都会有一个带有该请求的 PendingIntent 实例。