Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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 在每天的特定时间设置开机时间报警_Android_Broadcastreceiver_Alarmmanager_Repeatingalarm - Fatal编程技术网

Android 在每天的特定时间设置开机时间报警

Android 在每天的特定时间设置开机时间报警,android,broadcastreceiver,alarmmanager,repeatingalarm,Android,Broadcastreceiver,Alarmmanager,Repeatingalarm,我已经在android中启动了上午9:00的警报,启动完成。但在完成引导后,每分钟都会触发一次警报 我的要求是,它应该在开机后设置警报,但只在上午9:00发出警报 这是我的密码: 公共类AlarmUtil{ 私人悬而未决的意图 public static void setAlarm(Context context) { AlarmManager alarmManager = (AlarmManager) context .getSystemService(Con

我已经在android中启动了上午9:00的警报,启动完成。但在完成引导后,每分钟都会触发一次警报

我的要求是,它应该在开机后设置警报,但只在上午9:00发出警报

这是我的密码: 公共类AlarmUtil{ 私人悬而未决的意图

public static void setAlarm(Context context) {

    AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 00);
    calendar.set(Calendar.SECOND, 00);
    calendar.set(Calendar.AM_PM, Calendar.AM);
    //calendar.setTimeInMillis(calendar.getTimeInMillis());
    calendar.add(Calendar.SECOND, 1);

    Intent intent = new Intent(context, Services.class);
    PendingIntent pintent = PendingIntent.getService(context, 123456789,
            intent, 0);

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);

}
}

public class AlarmBroadcastReciever extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
        Toast.makeText(context, "Booted!", Toast.LENGTH_SHORT).show();
        AlarmUtil.setAlarm(context);

    }
}
}
服务(我的服务类)

}

我缺少的地方。请帮帮我。提前谢谢

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
        calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);
通过调用
setRepeating()
,您指示它每分钟触发一次意图。您可能打算使用或
setExact()

此外,您正在将当前日期的闹钟设置为9:00。我不确定你的目标是什么,但如果你想在“下一个9:00”设置闹钟(即作为闹钟),如果当前时间大于9:00,你可能应该加上一天。从文件中:

如果规定的触发时间已过,则会触发报警 马上

编辑:如果您需要在每天9:00触发此警报,则
setRepeating()
是正确的,但以毫秒为单位的时间应为
AlarmManager.INTERVAL\u day
。不过,请注意关于过去警报的注释。如果您在上午10:00启动手机,并使用当前代码,那么除了将来的警报外,还会立即收到警报


而且,正如@DerGolem所指出的,如果您以API级别19为目标,那么这些警报将是不精确的(并且没有
setRepeatingExact()
)。如果您需要精确的警报,那么您必须使用
setExact()
来安排一个警报,然后在下一个警报触发时安排下一个警报,依此类推。

您需要将“1*60*1000”替换为AlarmManager.INTERVAL\u DAY每天设置一次。

您好,我使用了以下代码,并且能够在每天上午9点生成警报

alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, AlarmService.class);

    PendingIntent pintent = PendingIntent.getService(this, 123456789,
            intent, 0);

    // Set the alarm to start at 8:30 a.m.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 00);


    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), 1000 * 60 * 1 * 60 * 24, pintent);

看看这个文档,我刚刚添加了i min gap,只是为了测试。问题是如果我在上午8:56重新启动系统。setAlarm()将被调用,然后它将在每分钟后启动服务。假设启动时间为上午8:56,我希望在上午9:00获得警报。它会在早上8:57、8:58、8:59发出警报。@DeepikaLalra我不确定我是否明白了。如果需要单个报警,请使用
set()
<代码>设置重复()将触发重复报警。这不是您当前遇到的问题吗?
注意:从API 19(KITKAT)开始,警报传递是不精确的:操作系统将切换警报,以尽量减少唤醒和电池使用。有新的API支持需要严格交付保证的应用程序;请参见设置窗口(int,long,long,pendingent)和设置精确窗口(int,long,pendingent)。targetSdkVersion早于API 19的应用程序将继续看到以前的行为,即所有警报都会在请求时准确发送。
@matiash我已经尝试过这一点。它能在9点准时发射。但我想问的是,它是否会在每天早上9点发出警报。因为我想每天早上9:00被解雇。@DeepikaLalra用这个新信息编辑了答案(很抱歉,从你的问题中它真的不明白)。
alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, AlarmService.class);

    PendingIntent pintent = PendingIntent.getService(this, 123456789,
            intent, 0);

    // Set the alarm to start at 8:30 a.m.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 00);


    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), 1000 * 60 * 1 * 60 * 24, pintent);