使用日历在特定时间发送通知
Send notification at certain time with calendar
您好,目前我正在尝试在我的列表适配器中设置一个按钮。该按钮的想法是它从两个编辑文本中获取一组值,一个是小时值,另一个是分钟值,然后将其设置为日历和闹钟。在应用程序到达特定时间后,它应该向用户发送通知,但目前它会在按下按钮后立即发送通知,而不是等待所需的时间,有人能发现我的错误吗?
convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom_row_contact_number, null);
alarmManager = (AlarmManager) convertView.getContext().getSystemService(Context.ALARM_SERVICE);
myCalendar = Calendar.getInstance();
year_x = myCalendar.get(Calendar.YEAR);
month_x = myCalendar.get(Calendar.MONTH);
day_x = myCalendar.get(Calendar.DAY_OF_MONTH);
receiver = new Intent(convertView.getContext(), Alarm_Reciever.class);
Button btnSendMessage = (Button)convertView.findViewById(R.id.btnSendMessage);
btnSendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int hourValue = Integer.valueOf(editHours.getText().toString());
int minutevalue = Integer.valueOf(editMinutes.getText().toString());
Log.i("hour", Integer.toString(hourValue));
myCalendar.set(Calendar.HOUR_OF_DAY,hourValue);
myCalendar.set(Calendar.MINUTE, minutevalue);
pendingIntent = PendingIntent.getBroadcast(v.getContext(), 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP,myCalendar.getTimeInMillis(),pendingIntent);
}
});
}
此外,如果我将下面的代码移动到 oncreate
alarmManager = (AlarmManager) convertView.getContext().getSystemService(Context.ALARM_SERVICE);
myCalendar = Calendar.getInstance();
year_x = myCalendar.get(Calendar.YEAR);
month_x = myCalendar.get(Calendar.MONTH);
day_x = myCalendar.get(Calendar.DAY_OF_MONTH);
receiver = new Intent(convertView.getContext(), Alarm_Reciever.class);
我只剩下下面的代码,但我收到一个错误
java.lang.NullPointerException: 尝试在空对象引用
上调用虚拟方法'void java.util.Calendar.set(int, int)'
Button btnSendMessage = (Button)convertView.findViewById(R.id.btnSendMessage);
btnSendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int hourValue = Integer.valueOf(editHours.getText().toString());
int minutevalue = Integer.valueOf(editMinutes.getText().toString());
Log.i("hour", Integer.toString(hourValue));
myCalendar.set(Calendar.HOUR_OF_DAY,hourValue);
myCalendar.set(Calendar.MINUTE, minutevalue);
pendingIntent = PendingIntent.getBroadcast(v.getContext(), 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP,myCalendar.getTimeInMillis(),pendingIntent);
}
});
可能是因为总是今天,所以预定的时间可能是过去的。
这可以通过几种方法解决,但一个简单的方法是在设置小时和分钟后添加它。
if(calendar.getTimeInMillis() < System.currentTimeMillis()) {
calendar.add(Calendar.DAY_OF_YEAR, 1);
}
您好,目前我正在尝试在我的列表适配器中设置一个按钮。该按钮的想法是它从两个编辑文本中获取一组值,一个是小时值,另一个是分钟值,然后将其设置为日历和闹钟。在应用程序到达特定时间后,它应该向用户发送通知,但目前它会在按下按钮后立即发送通知,而不是等待所需的时间,有人能发现我的错误吗?
convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom_row_contact_number, null);
alarmManager = (AlarmManager) convertView.getContext().getSystemService(Context.ALARM_SERVICE);
myCalendar = Calendar.getInstance();
year_x = myCalendar.get(Calendar.YEAR);
month_x = myCalendar.get(Calendar.MONTH);
day_x = myCalendar.get(Calendar.DAY_OF_MONTH);
receiver = new Intent(convertView.getContext(), Alarm_Reciever.class);
Button btnSendMessage = (Button)convertView.findViewById(R.id.btnSendMessage);
btnSendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int hourValue = Integer.valueOf(editHours.getText().toString());
int minutevalue = Integer.valueOf(editMinutes.getText().toString());
Log.i("hour", Integer.toString(hourValue));
myCalendar.set(Calendar.HOUR_OF_DAY,hourValue);
myCalendar.set(Calendar.MINUTE, minutevalue);
pendingIntent = PendingIntent.getBroadcast(v.getContext(), 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP,myCalendar.getTimeInMillis(),pendingIntent);
}
});
}
此外,如果我将下面的代码移动到 oncreate
alarmManager = (AlarmManager) convertView.getContext().getSystemService(Context.ALARM_SERVICE);
myCalendar = Calendar.getInstance();
year_x = myCalendar.get(Calendar.YEAR);
month_x = myCalendar.get(Calendar.MONTH);
day_x = myCalendar.get(Calendar.DAY_OF_MONTH);
receiver = new Intent(convertView.getContext(), Alarm_Reciever.class);
我只剩下下面的代码,但我收到一个错误
java.lang.NullPointerException: 尝试在空对象引用
上调用虚拟方法'void java.util.Calendar.set(int, int)' Button btnSendMessage = (Button)convertView.findViewById(R.id.btnSendMessage);
btnSendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int hourValue = Integer.valueOf(editHours.getText().toString());
int minutevalue = Integer.valueOf(editMinutes.getText().toString());
Log.i("hour", Integer.toString(hourValue));
myCalendar.set(Calendar.HOUR_OF_DAY,hourValue);
myCalendar.set(Calendar.MINUTE, minutevalue);
pendingIntent = PendingIntent.getBroadcast(v.getContext(), 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP,myCalendar.getTimeInMillis(),pendingIntent);
}
});
可能是因为总是今天,所以预定的时间可能是过去的。
这可以通过几种方法解决,但一个简单的方法是在设置小时和分钟后添加它。
if(calendar.getTimeInMillis() < System.currentTimeMillis()) {
calendar.add(Calendar.DAY_OF_YEAR, 1);
}