gpt4 book ai didi

java - AlarmManager 第二次过早触发 PendingIntent

转载 作者:行者123 更新时间:2023-11-30 11:38:49 25 4
gpt4 key购买 nike

我有这个代码:

设置闹钟:

public void setAlarm()
{
Calendar Calendar_Object = Calendar.getInstance();

Calendar_Object.add (Calendar.DAY_OF_YEAR, 1);

Calendar_Object.set(Calendar.HOUR_OF_DAY, 0);
Calendar_Object.set(Calendar.MINUTE, 0);
Calendar_Object.set(Calendar.SECOND, 1);

Intent myIntent = new Intent(Main.this, AlarmReceiver.class);

PendingIntent pendingIntent = PendingIntent.getBroadcast(Main.this,
0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

alarmManager.setRepeating(AlarmManager.RTC, Calendar_Object.getTimeInMillis(),1000*60*60*24, pendingIntent);
}

广播接收器:

public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

Intent myIntent = new Intent(context, NotificationService.class);
context.startService(myIntent);
}

}

服务:

public class NotificationService extends Service {

private NotificationManager mManager;

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onCreate() {
super.onCreate();

}

@SuppressWarnings("deprecation")
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);

mManager = (NotificationManager) this.getApplicationContext()
.getSystemService( this.getApplicationContext().NOTIFICATION_SERVICE);

Intent intent1 = new Intent(this.getApplicationContext(), ABC.class);

Notification notification = new Notification(R.drawable.ic_launcher,
"xxx", System.currentTimeMillis());

intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TOP);

PendingIntent pendingNotificationIntent = PendingIntent.getActivity(
this.getApplicationContext(), 0, intent1,
PendingIntent.FLAG_UPDATE_CURRENT);

notification.flags |= Notification.FLAG_AUTO_CANCEL;

notification.setLatestEventInfo(this.getApplicationContext(),
"abc", "xyz",
pendingNotificationIntent);

mManager.notify(0, notification);
}
}

在 00:00:01 设置闹钟后一切正常,但下一次问题发生了。 PendingIntent 在 24 小时间隔之间触发 6 到 8 次。我不记得每个触发器的时间是否相同,但我希望每天触发一次。代码有什么问题?

最佳答案

这将创建一个每天 00:05 响起的闹钟,重要的部分是 AlarmManager.INTERVAL_DAY

Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 5);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.HOUR, 24);

PendingIntent pi = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
mgr.cancel(pi);
mgr.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);

此外,不要忘记在重新设置新警报时始终取消以前的类似警报,否则它们都会关闭,旧设置警报和新警报,请参见上面的 mgr.cancel (圆周率);

关于java - AlarmManager 第二次过早触发 PendingIntent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13529783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com