android - 警报没有停止

标签 android alarmmanager

我正在尝试停止闹钟并检查它是否停止,但它总是返回 true 意味着闹钟正在工作。我试图根据链接中的答案停止警报 https://stackoverflow.com/a/17616299/1226882但它对我不起作用。

请引用下面的代码

  • 启动闹钟

    public static void startSchedulerAlaram(Context ctx) {
    
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 0); 
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    
    if (calendar.compareTo(Calendar.getInstance()) <= 0)
        calendar.add(Calendar.DATE, 1);
    
    AlarmManager alarmManager = (AlarmManager) ctx
            .getSystemService(Context.ALARM_SERVICE);
    
    Intent intent = new Intent(ctx, Alaram_Receiver.class);
    intent.setAction(Utility.SCHEDULE_ACTION);
    
    PendingIntent pi = PendingIntent.getBroadcast(ctx, 1, intent,0);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
    calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pi);
    
    log("Scheduler Alarm", "Started");
    
    }
    
  • 停止闹钟

    public static void stopSchedulerAlaram(Context ctx) {
    
    Intent intent = new Intent(ctx, Alaram_Receiver.class);
    intent.setAction(Utility.SCHEDULE_ACTION);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 1,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) ctx
            .getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
    
    log("Scheduler Alarm", "Stopped");
    }
    
  • 检查警报

    public static boolean checkSchedulerAlaram(Context ctx) {
    
    boolean alarmUp = (PendingIntent.getBroadcast(ctx, 1, new Intent(ctx,Alaram_Receiver.class).setAction(Utility.SCHEDULE_ACTION),
            PendingIntent.FLAG_NO_CREATE) != null);
    
    return alarmUp;
    }
    

最佳答案

你必须传递设置闹钟的不同id

PendingIntent.getBroadcast(ctx, id, intent,PendingIntent.FLAG_UPDATE_CURRENT);

对于取消闹钟,您已经传递了与设置时相同的id

PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, id,
        intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) ctx
        .getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);

关于android - 警报没有停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23316413/

相关文章:

android - 闹钟应用程序不准确

java - onBackPressed() 没有被调用

android - Android 中对象的动画/拖动

android - 如何获取所有联系人的名字,姓氏,电子邮件,电话号码等而不重复

android - 无法解析符号Firebase

java - 列出 AlarmManager 中的所有 PendingIntents

android - SugarORM + Kotlin : Unresovled reference "listAll"

android - 警报管理器可靠性

Android 毫秒为一次

android - java.lang.SecurityException : ! @Too many alarms (500) 从 pid 10790 uid 10206 注册