AlarmManager 在初始设置时发送
AlarmManager gets send on initial setup
我的应用程序有问题,在第一次启动时我想设置一个警报意图,我希望警报管理器在特定时间每 24 小时向我发送一次通知。
它的每一件事都有效,除了我第一次启动应用程序时(当数据从应用程序中清除时),然后立即发送通知,直到下一次时钟到达时才应该这样做 09:00.
这里是设置闹钟的函数(只在应用第一次运行时调用运行)
public void setAlarm(){
Toast.makeText(this, "setAlarm()", Toast.LENGTH_LONG).show();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Intent alarmIntent = new Intent(this, AlertReceiver.class);
if(PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_ONE_SHOT) != null){
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
}
这里是广播接收者的通知函数
public void createNotification(Context context, String msg, String msgText, String msgAlert){
PendingIntent notificIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
mBuilder.setSmallIcon(R.drawable.ic_stat_dmq_notification_icon);
mBuilder.setTicker(msgAlert); //Ticker!
mBuilder.setWhen(System.currentTimeMillis());
mBuilder.setContentTitle(msg); //Title:
mBuilder.setContentText(msgText); //Text
mBuilder.setContentIntent(notificIntent);
mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(uniqueId, mBuilder.build());
我已经研究了好几天了,但我似乎无法弄明白,也找不到解决方案。如果有人能帮助我,我会很高兴!
你所在的地区是上午 9 点多吗?那可能是您错误的根源。设置为 android 过去某个时间的闹钟会立即触发。尝试:
calendar.set(Calendar.YEAR, 2017);
疯狂只是为了测试
好吧,我终于想通了。
唯一需要添加的是毕竟 calendar.set 是
if(calendar.getTimeInMillis() < System.currentTimeMillis()){
Toast.makeText(this,"1 day have been added", Toast.LENGTH_SHORT).show();
calendar.add(Calendar.DATE, 1);
}
它基本上只是检查时间是否在过去,如果是,那么它会增加一天,所以闹钟会在第二天响起。
我的应用程序有问题,在第一次启动时我想设置一个警报意图,我希望警报管理器在特定时间每 24 小时向我发送一次通知。 它的每一件事都有效,除了我第一次启动应用程序时(当数据从应用程序中清除时),然后立即发送通知,直到下一次时钟到达时才应该这样做 09:00.
这里是设置闹钟的函数(只在应用第一次运行时调用运行)
public void setAlarm(){
Toast.makeText(this, "setAlarm()", Toast.LENGTH_LONG).show();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Intent alarmIntent = new Intent(this, AlertReceiver.class);
if(PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_ONE_SHOT) != null){
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
}
这里是广播接收者的通知函数
public void createNotification(Context context, String msg, String msgText, String msgAlert){
PendingIntent notificIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
mBuilder.setSmallIcon(R.drawable.ic_stat_dmq_notification_icon);
mBuilder.setTicker(msgAlert); //Ticker!
mBuilder.setWhen(System.currentTimeMillis());
mBuilder.setContentTitle(msg); //Title:
mBuilder.setContentText(msgText); //Text
mBuilder.setContentIntent(notificIntent);
mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(uniqueId, mBuilder.build());
我已经研究了好几天了,但我似乎无法弄明白,也找不到解决方案。如果有人能帮助我,我会很高兴!
你所在的地区是上午 9 点多吗?那可能是您错误的根源。设置为 android 过去某个时间的闹钟会立即触发。尝试:
calendar.set(Calendar.YEAR, 2017);
疯狂只是为了测试
好吧,我终于想通了。 唯一需要添加的是毕竟 calendar.set 是
if(calendar.getTimeInMillis() < System.currentTimeMillis()){
Toast.makeText(this,"1 day have been added", Toast.LENGTH_SHORT).show();
calendar.add(Calendar.DATE, 1);
}
它基本上只是检查时间是否在过去,如果是,那么它会增加一天,所以闹钟会在第二天响起。