【问题标题】:Setting alarm on monthly basis android每月设置警报android
【发布时间】:2013-07-25 12:22:40
【问题描述】:

我正在开发一个 Android 应用程序,用于设置每天、每周、每月的闹钟。通过将给定日期和时间转换为毫秒,前两个工作正常。但是当我试图每月做同样的事情时它不起作用。日期格式完全不同。

我设置如下,

Alarmtimefor30 具有以毫秒为单位的给定日期。

  am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimefor30, 30*1440*60000 , pi);

我将 intervalMillis 设为 30*1440*60000,结果为 2592000000,即 30 天(以毫秒为单位)。当我尝试打印 30*1440*60000 时,结果为 1702967296。我不确定可能是什么问题。

是否有另一种设置每月警报的方法(在每个月的特定日期和时间触发)?

请帮忙!谢谢!

【问题讨论】:

  • 您认为您的设备会使用整整一个月吗?
  • 您打算在您的设备上使用整整一个月吗?你不觉得在没有电池的任何时候,它都会被关闭,警报值会重新开始。
  • 是的。最好的方法是什么?
  • @DuncanACoulter,默认警报的值保留在自己的Android系统中,但是一旦设备关闭,用户定义的警报就不会保存。
  • @DuncanACoulter For Developer 当方法不可用时,最好自己编写代码:)

标签: java android math alarmmanager


【解决方案1】:

默认情况下,Java 中的整数文字类型为int,它是一个 32 位数字。当您将int 乘以int 时,结果也是int,因此您的结果将被截断。显然setRepeating 的参数是long,但这并不意味着编译器会为你解决这个问题——你的乘法仍然会被截断。

解决方案是显式强制字面量为long 类型,即64 位数字:

am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimefor30, 30L*1440L*60000L , pi);

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多