在安卓系统上如何设置每月闹钟?

4

我正在开发一个Android应用程序,可以按照每天、每周、每月的基础上设置闹钟。前两者通过将给定的日期和时间转换为毫秒来正常工作。但是,当我尝试对每月执行相同操作时,它不起作用。这是因为日期格式完全不同。

我设置如下:

Alarmtimefor30中包含给定日期的毫秒数。

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

我将intervalMillis设置为30 * 1440 * 60000,结果为2592000000,即30天的毫秒数。当我尝试打印30 * 1440 * 60000时,结果为1702967296。我不确定问题出在哪里。

是否有其他方法可以设置每月的闹钟(以特定日期和时间触发)?

请帮忙!谢谢!


你认为你的设备会连续运行一个月吗? - Vigbyor
你打算在设备上保留一个月吗?你不觉得如果没有电池,它会关闭并重新开始警报值吗? - Vigbyor
1
@DuncanACoulter,默认闹钟的值保存在Android系统中,但用户定义的闹钟一旦设备关闭就不会被保存。 - Vigbyor
@Vigbyor 我不知道那个。绝对要注意一下。 - DuncanACoulter
1
@DuncanACoulter 对于开发者来说,如果没有可用的方法,最好自己编写代码 :) - Vigbyor
显示剩余3条评论
1个回答

7
默认情况下,Java 中的整数字面量将是类型为int的32位数字。当你将一个int乘以另一个int时,结果也是一个int,因此你的结果被截断了。显然,setRepeating方法的参数是一个long,但这并不意味着编译器会为你修正 - 你的乘法仍然会被截断。
解决方案是显式地强制这些字面量成为long类型,它是一个64位数字:
am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTimefor30, 30L*1440L*60000L , pi);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接