Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 取消具有不同上下文的报警_Java_Android_Broadcastreceiver_Alarmmanager_Android Context - Fatal编程技术网

Java 取消具有不同上下文的报警

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,

我在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);
    }
}
但要取消它,我在活动中使用以下代码:

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,那么两个挂起的内容就不再匹配了,对吗?