android - 在特定时间取消重复闹钟

标签 android alarmmanager repeatingalarm

我想在特定时间取消 2 个重复闹钟,但应用程序目前决定在您创建闹钟后立即调用取消。例如,如果您将结束重复的时间设置为 13:18,则重复闹钟会一直重复到该时间为止。

这是我一直在玩弄的一些代码:

Toast.makeText(this, "Alarm Scheduled for " + midnight, Toast.LENGTH_LONG).show();


    AlarmManager Databackon = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

      Databackon.set(AlarmManager.RTC_WAKEUP,midnight, stoprepeat(V));
    // Databackon.set(AlarmManager.RTC_WAKEUP,midnight, PendingIntent.getBroadcast(this,4,  intent, PendingIntent.FLAG_UPDATE_CURRENT));



     Toast.makeText(this, "THIS " + midnight, Toast.LENGTH_LONG).show();


    /*  
      Button button1=(Button)findViewById(R.id.startupdates);
      button1.setVisibility(View.INVISIBLE);
      Button button2=(Button)findViewById(R.id.stopbutton);
      button2.setVisibility(View.VISIBLE);
    */
}

public PendingIntent stoprepeat(View V)
{
    Intent intent = new Intent(UpdatesActivity.this,AlarmReciever.class);
    PendingIntent pendingIntent =
            PendingIntent.getBroadcast(this,1,  intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.cancel(pendingIntent);

    Intent intent2 = new Intent(UpdatesActivity.this,DataOff.class);
    PendingIntent pendingIntent2 =
            PendingIntent.getBroadcast(this,2, intent2,PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am2 = (AlarmManager) getSystemService(ALARM_SERVICE);
    am2.cancel(pendingIntent2);

        Toast.makeText(this, "Repeating Alarm stopped", Toast.LENGTH_LONG).show();

          Button button1=(Button)findViewById(R.id.startupdates);
          button1.setVisibility(View.VISIBLE);
          Button button2=(Button)findViewById(R.id.stopbutton);
          button2.setVisibility(View.INVISIBLE);

        return pendingIntent;
}

最佳答案

您的代码毫无意义。您必须牢记三个基本事项:

  1. 所有警报都链接到特定应用程序。
  2. 警报功能基于待处理的 Intent 。
  3. 可以通过匹配特定的Intent 来取消。

考虑到这一点,您可以实现以下解决方案。

照常创建基本警报:

Intent myIntent = new Intent(this, Target.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);

创建另一个警报,它将负责取消并将第一个警报的 pendingIntent 放入它:

Intent cancellationIntent = new Intent(this, CancelAlarmBroadcastReceiver.class);
cancellationIntent.putExtra("key", pendingIntent);
PendingIntent cancellationPendingIntent = PendingIntent.getBroadcast(this, 0, cancellationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, time, cancellationPendingIntent, PendingIntent.FLAG_UPDATE_CURRENT);

其中 CancelAlarmBroadcastReceiver 如下:

public class CancelAlarmBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        PendingIntent pendingIntent = intent.getParcelableExtra("key");
        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        am.cancel(pendingIntent);
    }
}

我没有检查它,但我认为它应该可以工作。

关于android - 在特定时间取消重复闹钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23829176/

相关文章:

java - AlarmManager setInexactRepeating、setWindow、setRepeating 方法在一周内从循环内调用时不会触发警报

android - 应用程序被销毁后立即发出通知

java - 是否可以在测试用例中注册接收器?

java - 我可以将闹钟更改为重复闹钟吗?

android - 用于定期后台任务的警报管理器的替代方案

java - 在相对布局中将宽度和高度设置为百分比

java - Google Play Game Service实时多人游戏获取随机 map 的方法

android - 当某些闹钟在 Android 中自然重复时设置多个闹钟的最佳方法

Android XML 布局 - 两列行和一底行

android - 如何从屏幕外向下滑动 Logo ?