【问题标题】:pendingintent on alarms for androidandroid 警报的未决意向
【发布时间】:2012-02-19 07:18:58
【问题描述】:

将服务设置为在特定时间关闭时,我使用 AlarmManager 系统服务。 一切顺利进行,调用服务并执行操作。

到达闹钟时间后,服务启动,此时我得到系统时间(System.currentTimeMillis())。我猜这不会是服务启动的实际时间。有没有办法获取为此 PendingIntent 设置的时间?

设置早上 9 点的闹钟。
DoStuffService 早上 9 点开始。
DoStuffService 知道它应该在上午 9 点开始,并将此值用于未来的功能。

【问题讨论】:

    标签: android alarm android-pendingintent


    【解决方案1】:

    当您为闹钟创建意图时,您可以将额外的数据(包括闹钟的时间)放入其中,如下所示:

    Intent intent = new Intent("action name");
    
    //put extra data into the intent:
    intent.putExtra("alarm_time_hours", hours);
    intent.putExtra("alarm_time_minutes", minutes);
    
    PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
    

    然后在您的接收器或服务中,您需要从接收到的意图中获取这些额外数据。使用这样的东西:

    Bundle bundle = intent.getExtras();
    if(bundle.containsKey("alarm_time_hours")) {
        int hours = bundle.getInt("alarm_time_hours");
    }
    if(bundle.containsKey("alarm_time_minutes")) {
        int minutes = bundle.getInt("alarm_time_minutes");
    }
    

    【讨论】:

      【解决方案2】:

      有没有办法获得为此 PendingIntent 设置的时间?

      不,抱歉。

      但是,您自己确定它应该不是非常困难。按照您的示例,如果您的服务报告现在是 09:00:02.36,您应该能够向下舍入以确定这是上午 9 点的警报。

      【讨论】:

      • 这就是我现在正在做的事情。只是寻找一种更清洁的方式。我想一个额外的问题是,有没有办法在发出警报、服务启动然后调用 System.currentTimeMillis(假设它基本上是第一次调用)之间的时间长度超过一分钟?
      • @winna:有可能吗?大概。有可能吗?不是真的。
      • 我想那将不得不这样做
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-18
      相关资源
      最近更新 更多