我在OnBootReceiver中创建了一个警报,如下所示:
public class OnBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 10);
Intent i = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), savedIntervalAutomaticMilisInt, pendingIntent);
}
}
但要取消它,我在Activity中使用此代码:
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
scManager.clearErrors();
所以要设置它我使用BroadcastReceiver的Context参数中的上下文,但要取消它我使用Activity中的this
上下文。我的问题:即使上下文略有不同,警报是否仍会被取消?
答案 0 :(得分:6)
即使上下文略有不同,警报仍然会被取消吗?
在这种情况下,上下文无关紧要 - 它只是一种到达AlarmManager
的方式。
您在取消警报逻辑中选择PendingIntent.FLAG_CANCEL_CURRENT
可能会导致问题。如果您遇到困难(例如,adb shell dumpsys alarm
表示您的警报在取消后仍然存在),请尝试将PendingIntent.FLAG_CANCEL_CURRENT
替换为0
。
答案 1 :(得分:1)
尝试使用全局(应用程序范围)上下文对象:android.content.ContextWrapper.getApplicationContext()