如何在每天凌晨12:00开始我的Android应用程序,即使应用程序已关闭

时间:2016-05-22 07:09:03

标签: java android

我使用以下代码。 但它没有像我预期的那样工作。

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小时就会安排一次。

你能用恰当的例子向我推荐正确的逻辑吗?

非常感谢您的帮助。

提前致谢

2 个答案:

答案 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