我正在为学校创建待办事项应用。当某人输入该项目的日期和时间时,该应用程序应创建一个在指定时间熄灭的通知。但是,当应用程序运行时,通知会在创建项目时发生,而不是指定的时间。附件是我的通知方法。
static final int uniqueid = 139868;
@SuppressLint("NewApi")
public void sendNotification(String title, String body){
try{
Log.i("LIST", "inside sendNotification");
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent intent = new Intent(this,ItemEditorActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
//set notification for date set
Notification n = new Notification.Builder(this)
.setContentTitle(title)
.setSmallIcon(R.drawable.ic_launcher)
.setWhen(dateAndTime.getTimeInMillis())
.setTicker(body)
.addAction(R.drawable.ic_launcher, title, pi)
.setDefaults(Notification.DEFAULT_ALL)
.setAutoCancel(true)
.build();
Log.i("LIST", dateAndTime.toString());
Log.i("LIST", "notify");
nm.notify(uniqueid, n);
} catch (Exception e){
e.printStackTrace();
}
}
其中private Calendar dateAndTime=Calendar.getInstance();
答案 0 :(得分:1)
通知“在指定时间停止”。当您发布Notification
(即:致电NotificationManager.notify()
)时,会立即显示。从您的一条评论中,您似乎对when
的{{1}}参数感到困惑。这只是一个将显示给用户的时间戳。它旨在用于向用户传达一些相关的时间戳(例如,如果通知是针对日历事件,则可能是日历事件的时间)。这不是通知发布的时间。
要安排通知在指定时间启用,您需要使用Notification
。
答案 1 :(得分:0)
使用闹钟管理器
AlarmManager alarmManager = (AlarmManager) getApplicationContext()
.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,pendingIntent);
INTERVAL_DAY将每天同时重复闹钟
编辑:这就是我的方式,在我的活动中,我使用警报管理器在用户时间设置待定意图,然后在广播接收器启动服务时该服务将启动通知答案 2 :(得分:0)
我正在编辑我的答案,可能我确切地解决了你的问题。看,您使用的是唯一ID,可能这是您的待处理Intent的请求代码。因此,当您为每个待处理的意图使用相同的请求代码时,因此当您设置新的请求代码时,您的先前的警报/通知请求将被替换。这就是您最近的通知有效但前一个通知无效的原因。您必须使用不同的请求代码。这就是原因。
现在,尝试这种方式来显示警报和通知......当然,根据您的需要在以下代码中更改上下文和其他内容。它应该工作正常
String Noti_title = intent.getExtras().getString("title");
String Noti_message = intent.getExtras().getString("notes");
int Noti_Code = intent.getExtras().getInt("code");
mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE);
Intent intent1 = new Intent(this.getApplicationContext(), MainActivity.class);
Notification notification = new Notification(R.drawable.ic_launcher , Noti_title , 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(),Noti_title , Noti_message , pendingNotificationIntent);
notification.vibrate = new long[] { 100L, 100L, 200L, 500L };
mManager.notify(Noti_Code , notification);
try {
Uri notification_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification_uri);
r.play();
} catch (Exception e) {}