Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓系统|每天在同一个小时运行setAlartm |不工作_Android_Alarmmanager - Fatal编程技术网

Android 安卓系统|每天在同一个小时运行setAlartm |不工作

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

在我的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, 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!调用的方法中存在问题。谢谢你帮助我!!