Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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 AlarmManager第二天未触发警报_Android_Alarmmanager - Fatal编程技术网

Android AlarmManager第二天未触发警报

Android AlarmManager第二天未触发警报,android,alarmmanager,Android,Alarmmanager,我有一个闹钟管理器,我想每天早上6点启动它。我在应用程序首次启动时调用类通知,因此,它会在每天早上6点(重复)设置一个重复警报 当用户在早上6点到9点安装(并第一次运行应用程序)时,alarm manager工作正常,但是如果用户在早上9点之后第一次运行应用程序,我应该添加一天,并在第二天早上6点触发警报。这样做(将日期改为第二天),警报会在晚上10点左右随机触发(这是一个巨大的差异)。这是我的密码“ 公共通知(上下文){ this.context=context; Intent appstar

我有一个闹钟管理器,我想每天早上6点启动它。我在应用程序首次启动时调用类通知,因此,它会在每天早上6点(重复)设置一个重复警报

当用户在早上6点到9点安装(并第一次运行应用程序)时,alarm manager工作正常,但是如果用户在早上9点之后第一次运行应用程序,我应该添加一天,并在第二天早上6点触发警报。这样做(将日期改为第二天),警报会在晚上10点左右随机触发(这是一个巨大的差异)。这是我的密码“

公共通知(上下文){
this.context=context;
Intent appstart=新Intent(上下文,appstartreceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(上下文,0,appstart,PendingIntent.FLAG_UPDATE_CURRENT);//用于早晨的appstart
AlarmManager AlarmManager=(AlarmManager)context.getSystemService(context.ALARM\u服务);
Calendar currentCal=Calendar.getInstance();
Calendar startapp=Calendar.getInstance();//用于早上启动应用程序
startapp.set(日历小时/天,6);
startapp.set(日历分钟,0);
startapp.set(日历秒,0);
长currentTime=currentCal.getTimeInMillis();
int diff=(int)(currentTime startapp.getTimeInMillis())/(1000*60*60);

如果(diff用下面的代码替换您的代码…这将在每天早上6点触发。它可能会帮助您

public void notification(Context context) {

    Intent intent = new Intent(this, appstartreceiver.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 99, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 6);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);

    long startUpTime = calendar.getTimeInMillis();

    // To avoid firing the alarm if the time is passed while setting
    if (System.currentTimeMillis() > startUpTime) {
        startUpTime = startUpTime + 24 * 60 * 60 * 1000;
    }

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startUpTime, 24 * 60 * 60 * 1000, pendingIntent);
}

试试Commonware的wakeful intent服务,它可能会有所帮助

public class DailyListener implements AlarmListener {
    public void scheduleAlarms(AlarmManager mgr, PendingIntent pi, Context context) {

            // every day at scheduled time 
            Calendar calendar = Calendar.getInstance();
           // if it's after or equal 6 am schedule for next day
           if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 6) {
                calendar.add(Calendar.DAY_OF_YEAR, 1); 
            }
            calendar.set(Calendar.HOUR_OF_DAY, 6);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);

      mgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);


    }
}

你可以试着增加一天

if(calendar.before(calendar.getInstance())){
calendar.add(calendar.DAY/u/u月,1);
}
..//您的代码


这样,它每天都会在设定的时间触发。

我没有得到你的else部分。如果你想在每天早上6点设置重复警报,那么alarmManager.setRepeating(alarmManager.RTC_WAKEUP,startapp.getTimeInMillis(),1000*24*60*60,pi);就足够了。这样做,当用户在下午1点安装应用程序时,android会将闹钟安排在第二天下午1点而不是6点!这是有问题的!不,它只会在6点启动…我想你是这样测试的…在下午1点运行应用程序后,你将设备的日期更改为第二天,然后你的闹钟会在那时启动…是吗是吗?确切地说,我是在下午1点安装的。将设备的日期改为第二天早上5点等了一分钟,然后改为早上6点,再改为早上7点,最后改为下午1点!这是唯一一次出现通知谢谢你的回复。我已经尝试了该代码,它给了我与以前相同的问题。我可能应该在不同的时间尝试它租用手机或在模拟器中。再次感谢
public class DailyListener implements AlarmListener {
    public void scheduleAlarms(AlarmManager mgr, PendingIntent pi, Context context) {

            // every day at scheduled time 
            Calendar calendar = Calendar.getInstance();
           // if it's after or equal 6 am schedule for next day
           if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 6) {
                calendar.add(Calendar.DAY_OF_YEAR, 1); 
            }
            calendar.set(Calendar.HOUR_OF_DAY, 6);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);

      mgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);


    }
}