【问题标题】:Android Alarm and service triggerAndroid 警报和服务触发器
【发布时间】:2013-04-04 04:20:55
【问题描述】:

关于警报注册和触发器启动服务的几个问题。

  1. 如果在当前时间前几分钟设置了闹钟,然后如果手机关机,是否会在预定时间过去后触发下一部手机的闹钟?

  2. 如何取消/更新服务中的待处理意图? startCommand()服务方法中如何获取请求码?

  3. 如果每隔 10 秒触发一次警报,是否会创建多个服务实例?

【问题讨论】:

  • “取消/更新服务中的待处理意图” - 原因是什么?

标签: android android-service android-alarms


【解决方案1】:
  1. 如果“关闭”意味着完全关闭电源,而不仅仅是“短按电源按钮关闭屏幕”,答案是“否”

  2. 我认为您根本无法获取请求代码。正如getService 上的文档所述,requestCode 字段“当前未使用”。您应该使用 Intent(getService 的第三个参数)传递所有数据。

  3. 不会。见http://developer.android.com/reference/android/content/Context.html#startService(android.content.Intent)

对该方法的每次调用都会导致对目标服务的 onStartCommand(Intent, int, int) 方法的相应调用

【讨论】:

  • 感谢 Olegas 的投入
【解决方案2】:
  1. 将闹钟时间存储在 SharedPreferences 中。然后为android.intent.action.BOOT_COMPLETED注册一个receiver(记得给你的manifest添加一个android.permission.RECEIVE_BOOT_COMPLETED的权限),然后在receiver中,它会在启动时执行,你可以在SharedPreferences中查看alarm的,如果是这样,如果它还没有过去,你可以重置它,或者如果时间已经过去,你可以决定做什么。

  2. problem with cancel the alarm manager pending intent

  3. 没有。服务的 onCreate 只会被调用一次。它的 onStart 和 onStartCommand 每次都会被调用。

【讨论】:

    【解决方案3】:
    1. 在我正在开发的我自己的应用程序中,如果在手机关闭时设置了闹钟,则它已在下一部手机开机/启动时执行。那是没有 BOOT_COMPLETED 的接收器存在。我不确定这是否是预期的行为,或者它是否与电话变体一致。

      我相信,如果您希望闹钟在指定时间执行意图,则需要使用带有 WakeLock 的 getBroadcast PendingIntent,因为 PendingIntent 的其他变体不能保证手机在关机前会保持足够长的清醒状态再次。这是来自 CommonsWare 的另一篇文章的信息,我将尝试查找并链接到。

    2. 我相信您可以使用以下函数删除发送到警报管理器的pendingintent:

      public void unregisterEvent(PendingIntent sender) { ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)).cancel(sender); }

      PendingIntent 的创建位置与您尝试删除的原始意图完全相同。再次调用 AlarmManager 时,您可以通过提供正确的 id 和新的 PendingIntent 来更新它:

      AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);

      这是我用来创建/重建 PendingIntent 的:

      PendingIntent.getService(this, uniqueIndexToIntent, theIntentItself, PendingIntent.FLAG_UPDATE_CURRENT);

      如果该标志已经存在,它将更新意图,否则将创建一个新的。

    3. 我认为不会。但是,我建议您的服务在完成工作后调用 stopSelf(),以便最大限度地减少电池使用量。没事就不用跑!

    【讨论】:

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