Java 取消具有不同上下文的报警
我在OnBootReceiver中创建了一个警报,如下所示:Java 取消具有不同上下文的报警,java,android,broadcastreceiver,alarmmanager,android-context,Java,Android,Broadcastreceiver,Alarmmanager,Android Context,我在OnBootReceiver中创建了一个警报,如下所示: public class OnBootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.SECOND,
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);
}
}
但要取消它,我在活动中使用以下代码:
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上下文参数中的上下文,但要取消它,我使用活动中的
this
上下文。我的问题:即使上下文稍有不同,警报仍会被取消吗?尝试一下全局(应用程序范围)上下文对象:android.content.ContextWrapper.getApplicationContext()
即使上下文略有不同,警报是否仍会被取消
在这种情况下,上下文并不重要——它只是访问AlarmManager
的一种方式
您在取消中选择的
pendingent.FLAG\u CANCEL\u CURRENT
可能会导致报警逻辑出现问题。如果您遇到困难(例如,adb shell dumpsys alarm
表明您的报警在取消后仍然有效),请尝试将PendingEvent.FLAG_cancel_CURRENT
替换为0
,使用该报警可能不是一个坏主意。谢谢然而,它并没有真正回答这个问题好吧,thanx,但是为什么它会引起问题呢?@Merlin:FLAG\u CANCEL\u CURRENT
说“从轨道上核取上一个pendingent
实例”。Android用于保存报警的任何数据结构都可能由pendingent
键入,并且可能依赖于pendingent
实例相同,基于正常的pendingent
构造。注意,不要随意乱扔旗帜——只有当你确切知道在特定情况下为什么需要它时才使用FLAG\u CANCEL\u CURRENT
。我使用旗帜是因为当我在OnBootReceiver中重新创建闹钟时,由于某种原因,手机开机时闹钟没有取消,我避免报警设置两次。@Merlin:我指的是您在取消报警逻辑中使用的FLAG\u CANCEL\u CURRENT
,而不是在OnBootReceiver
中。但是如果我在取消报警逻辑中删除FLAG\u CANCEL\u CURRENT,那么两个挂起的内容就不再匹配了,对吗?