我使用以下代码。 但它没有像我预期的那样工作。
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MyReciever.class);
intent.putExtra(ONE_TIME, Boolean.TRUE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
20*1000, pi);
此代码将执行一次20秒,但如果我用20 * 1000替换24 * 60 * 60 * 1000,它将每天执行一次。
但如果我今天下午4点安装,我认为上面写的逻辑不会在上午12点执行,因为我每24小时就会安排一次。
你能用恰当的例子向我推荐正确的逻辑吗?
非常感谢您的帮助。
提前致谢
答案 0 :(得分:0)
试试这个:
//立即计算:
long now = System.currentTimeMillis();
//明天以毫秒计算:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 1); // Add a day
cal.set(Calendar.HOUR_OF_DAY, 0); // Set to 12:00
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.AM_PM, Calendar.PM);
long tomorrow = cal.getTimeInMillis();
//计算今天和明天之间的间隔
long interval = tomorrow - now;
现在用间隔替换20 * 1000。
请注意您在日历中添加一天,因此如果您在早上8.00设置闹钟 - 它会在12.00后的第二天发出警报。
答案 1 :(得分:0)
感谢您对我的问题的宝贵评论。 以下是我为我的应用程序实现的确切答案。通过这个逻辑,我的应用程序正好在上午12:00之后以10分钟间隔开始。它将继续每10分钟运行一次。
代码如下
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0); // Set to 12:00
cal.set(Calendar.MINUTE, 0);
long tomorrow = cal.getTimeInMillis();
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MyReciever.class);
intent.putExtra(ONE_TIME, Boolean.TRUE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
10*60*1000, pi);
为了停止继续运行,Android提供了spl API来提供如下所示的长间隔 AlarmManager.Hour,Fifteenminutes,Halfday等。
由于 Krishh