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

标签 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, 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 的上下文参数中的上下文,但要取消它,我使用 Activity 中的 this 上下文。我的问题:即使上下文略有不同,警报仍会被取消吗?

最佳答案

Will the alarm still be cancelled, even though the context is slightly different?

上下文在这种情况下并不重要——它只是一种获取 AlarmManager 的方法。

您在取消警报逻辑中选择的 PendingIntent.FLAG_CANCEL_CURRENT 可能会导致问题。如果您遇到困难(例如,adb shell dumpsys alarm 表示您的警报在取消后仍然存在),请尝试将 PendingIntent.FLAG_CANCEL_CURRENT 替换为 0

关于java - 取消具有不同上下文的警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16339645/

相关文章:

java - Java中根据索引数组对数组进行排序(类似于C#的Array.Sort())

java - 如何使用 firebase (FCM) 生成 token 并共享

android - 当jetpack compose中的第一个文本很长时,将省略号添加到第一个文本中

java - 样式化 GWT 界面的困难

java - 仅在内存中流式传输压缩文件

java - Mac OS X 上有哪些版本的 Java?

java - 是否可能,如果可以,如何将外部位置数据添加到 Android 上的 LocationManager 中?

android - 应用程序进入后台时取消注册广播接收器

Android BroadcastReceiver 的 onreceive 中的 PendingIntent 为 null

android - 如何在我的应用程序中获取组织工作配置文件的电话记录历史记录(发布为私有(private)应用程序)