Android 安卓系统|每天在同一个小时运行setAlartm |不工作
在我的Android应用程序中,我希望每天凌晨3点启动一个命令,并使用Android 安卓系统|每天在同一个小时运行setAlartm |不工作,android,alarmmanager,Android,Alarmmanager,在我的Android应用程序中,我希望每天凌晨3点启动一个命令,并使用AlarmManager和setRepeating。当应用程序启动时,我会执行以下操作: Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 3); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); Intent intent = new Intent(context, MyB
AlarmManager
和setRepeating
。当应用程序启动时,我会执行以下操作:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 3);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
Intent intent = new Intent(context, MyBroadcast.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
这是我的广播:
public class MyBroadcast extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.d("ALARM","Alarm worked.");
}
}
购买,而不是在3点运行命令,应用程序会立即运行命令。为什么?当报警设置为已过日期时,它将立即触发,如果您不想,您可以创建一些逻辑,仅在当前时间在凌晨3点之前的今天启动,类似的操作将起作用:
Calendar now = Calendar.getInstance();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 3);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
Intent intent = new Intent(context, MyBroadcast.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (now.before(cal)) {
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
else {
cal.set(Calendar.DAY_OF_YEAR, now.get(Calendar.DAY_OF_YEAR) +1);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
我们创建了另一个日历以用作当前时间的参考,并检查我们是否在凌晨3点之前,如果不是,则只在第二天调用闹钟。您正在日历中设置时间,但还需要将其设置为第二天,否则将是今天凌晨3点,这是过去的时间,会导致闹钟立即触发。是,如果用户删除appFine,则唯一的方法是不删除appFine!调用的方法中存在问题。谢谢你帮助我!!