这是我的警报管理器代码:
Intent intent=new Intent(getBaseContext(),AlarmReciever.class);
intent.setAction("com.example.projectx.ACTION");
PendingIntent pendingIntent=PendingIntent.getBroadcast(this,12345, intent,PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager=(AlarmManager)getSystemService(Activity.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),pendingIntent);
如果我选择在未来一小时/分钟启动闹钟,则代码效果很好。但如果我选择过去的小时/分钟,当我点击“设置闹钟”时会立即激活。
示例:
现在是15:00,我将闹钟设置为15:45,闹钟在15:45关闭,一切正常
现在是15:00,我将闹钟设置为14:30,点击“设置闹钟”后闹钟响起!
我的时间选择器总是设置为24小时模式。这可能是个问题吗?
谢谢!
答案 0 :(得分:10)
当然它确实......这意味着要这么做 Android认识到时间已经过去,所以它会触发警报,即使它已经很晚了。
您可以确保为闹钟设置的时间在当前时间之后。 只需计算出这种差异:
int diff = Calendar.getInstance().getTimeInMilis() - targetCal.getTimeInMillis();
如果diff大于0,则在日历中添加一天(targetCal)
现在,您设备的时间早于(而不是稍后),而不是下一个预定的闹钟时间。
答案 1 :(得分:0)
我认为您已经找到了解决问题的方法,但是我想与代码共享一个具体的示例,以便那些遇到相同问题并阅读此文章的人可以轻松一些。
AlarmManager alarmManager = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE);
Intent startServiceIntent = new Intent(MainActivity.this,Hintergrundservice.class);
PendingIntent startServicePendingIntent = PendingIntent.getBroadcast(MainActivity.this,0,startServiceIntent,0);
Calendar caldendar = Calendar.getInstance();
caldendar.setTimeInMillis(System.currentTimeMillis());
caldendar.set(Calendar.HOUR_OF_DAY,7);
caldendar.set(Calendar.MINUTE,1);
//long TimeDiffSL = caldendar.getTimeInMillis() - System.currentTimeMillis();
long TimeUntilTrigger;
if (System.currentTimeMillis() > caldendar.getTimeInMillis()){
TimeUntilTrigger = caldendar.getTimeInMillis() + 86400000;
Toast.makeText(getApplicationContext(),"Morgen erst",Toast.LENGTH_LONG).show();
}else{
TimeUntilTrigger = caldendar.getTimeInMillis();
Toast.makeText(getApplicationContext(),"Heute noch",Toast.LENGTH_LONG).show();
}
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,TimeUntilTrigger,AlarmManager.INTERVAL_DAY,startServicePendingIntent);
因此,我们的目标是每天早上7:01致电服务Hintergrundservice.class
。