【问题标题】:How to print alarm manager information?如何打印报警管理器信息?
【发布时间】:2023-03-03 13:54:01
【问题描述】:

我使用警报管理器创建了多个警报。但是在它通知之前,我不知道它是否成功创建。是否可以在应用程序中打印报警管理器的信息(即日期、时间、状态)?

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

    使用adb shell dumpsys alarm

    这将为您提供AlarmManager 中所有活动警报的列表

    【讨论】:

      【解决方案2】:

      检查这些问题,

      Get list of active PendingIntents in AlarmManager

      How to check if Alarm have been set and running

      或者我们可以这样做

      Intent intent = new Intent("com.my.package.MY_UNIQUE_ACTION");
      PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, 
                                        intent,     PendingIntent.FLAG_UPDATE_CURRENT);
      Calendar calendar = Calendar.getInstance();
      calendar.setTimeInMillis(System.currentTimeMillis());
      calendar.add(Calendar.MINUTE, 1);
      
      AlarmManager alarmManager = (AlarmManager)  context.getSystemService(Context.ALARM_SERVICE);
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,    calendar.getTimeInMillis(), 1000 * 60, pendingIntent);
      

      为了检查上述警报是否处于活动状态,我们可以这样做

      boolean alarmUp = (PendingIntent.getBroadcast(context, 0, 
          new Intent("com.my.package.MY_UNIQUE_ACTION"), 
          PendingIntent.FLAG_NO_CREATE) != null);
      
      if (alarmUp) {
      Log.d("myTag", "Alarm is already active");
      }
      

      标志表示如果所描述的 PendingIntent 不存在,则简单地返回 null 而不是创建它

      【讨论】:

      • 其实这一切都是为了检查PendingIntent是否存在。这并不会告诉你是否设置了闹钟,也不会告诉你闹钟何时到期,
      【解决方案3】:

      我认为这是你的解决方案

      Calendar calendar = Calendar.getInstance();
      Long preTime = calendar.getTimeInMillis();
      
      // set alarm after 5 minute
      calendar.add(Calendar.MINUTE, 5);
          Long postTime = calendar.getTimeInMillis();
          Long delay = postTime - preTime;
      AlarmManager manager = (AlarmManager)     getSystemService(Context.ALARM_SERVICE);
          manager.set(AlarmManager.RTC_WAKEUP, postTime, null);
      CountDownTimer timer = new CountDownTimer(delay, 1) {
      @Override
              public void onTick(long millisUntilFinished) {
                  final int seconds = (int) (millisUntilFinished / 1000) % 60;
                  final int minutes = (int) ((millisUntilFinished / (1000 * 60)) % 60);
      runOnUiThread(new Runnable() {
      @Override
                      public void run() {
                          text.setText("minute " + minutes + " Second " + seconds);
                      }
                  });
              }
      @Override
              public void onFinish() {
                  // TODO Auto-generated method stub
      }
          };
          timer.start();
      

      http://www.wenda.io/questions/4377820/show-left-time-until-the-alarm-start.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多