使用日历在特定时间发送通知

时间:2017-03-08 19:27:21

标签: android button calendar onclick alarm

嗨,目前我正在尝试在我的列表适配器中设置一个按钮。按钮的概念是它从两个编辑文本中抓取一组值,一个是小时,另一个是分钟值,然后将其设置为日历和警报。在应用程序到达特定时间后,它应该向用户发送通知,但是当前按下按钮后它会立即发送通知而不是等待所需的时间,是否有人能够发现我的错误?

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);


            }
        });

1 个答案:

答案 0 :(得分:0)

可能是因为这一天总是今天,所以预定的时间可能是过去的。

这可以通过几种方式解决,但一个简单的方法是在设置小时和分钟后添加它。

if(calendar.getTimeInMillis() < System.currentTimeMillis()) {
    calendar.add(Calendar.DAY_OF_YEAR, 1);
}