我的应用程序出现问题,首次启动时我想设置一个警报,我希望警报管理器在特定时间每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());
我已经看了好几天了,我似乎无法解决这个问题,也无法找到解决方案。如果有人可以帮助我,我会是一个快乐的人!
答案 0 :(得分:1)
您所在地区是否已经过了上午9点。这可能是您错误的根源。在Android中设置为过去时间的警报会立即启动。尝试:
(0.0, 0.0, 375.0, 618.0)
(0.0, 64.0, 375.0, 554.0)
(0.0, 0.0, 375.0, 554.0)
(0.0, -64.0, 375.0, 554.0) //Why there is a negative y-offset here?
(375.0, 1200.0)
(0.0, 0.0, 375.0, 1200.0)
疯狂只是为了测试
答案 1 :(得分:0)
好吧,毕竟我设法搞清楚了。 只有在 calendar.set
之后才需要添加的内容if(calendar.getTimeInMillis() < System.currentTimeMillis()){
Toast.makeText(this,"1 day have been added", Toast.LENGTH_SHORT).show();
calendar.add(Calendar.DATE, 1);
}
它基本上只是检查时间是否过去,如果是,那么它又增加了一天,所以警报将在第二天消失。