Search code examples
androidandroid-calendarandroid-datepickerandroid-timepicker

After picking date and time from Date & Time Picker, how to pass them as parameters in 'Create Event' function of Calendars?


I have a Date & Time Picker widget of Android Studio, from which i have selected a particular date(dd-mm-yy) format and time(hr:min) format.

Now, in the same Activity i have a 'Submit' button;by clicking on it, i pass several parameters to the 'Create Event' of my phone's native Calendar.

While i can successfully pass the title,description, location etc. i don't know how to pass the 'Start-End Date' & 'Start-End' Time parameters that i have chosen from the Date & Time Picker to the Native Calendar.

Thanks.

Here, is a brief code of the same:

1> Selecting date function:

private void selectDate()
{
    final Calendar c = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog dpd = new DatePickerDialog(getActivity(),
            new DatePickerDialog.OnDateSetListener()
            {

                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                {
                    Toast.makeText(getActivity(), dayOfMonth + "-" + (monthOfYear + 1) + "-" + year, Toast.LENGTH_LONG).show();
                }
            }, mYear, mMonth, mDay);
    dpd.show();
}

2> Selecting Time function:

private void selectTime()
{
    final Calendar c = Calendar.getInstance();
    mHour = c.get(Calendar.HOUR_OF_DAY);
    mMinute = c.get(Calendar.MINUTE);

    TimePickerDialog tpd = new TimePickerDialog(getActivity(),
            new TimePickerDialog.OnTimeSetListener()
            {

                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute)
                {
                    Toast.makeText(getActivity(), hourOfDay + ":" + minute, Toast.LENGTH_LONG).show();
                }
            }, mHour, mMinute, false);
    tpd.show();
}      

3) On Submit button click:

Sb.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        Intent schedule = new Intent(Intent.ACTION_INSERT);
        schedule.setType("vnd.android.cursor.item/event");
        schedule.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,   startTime);
        schedule.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime);
        schedule.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, false);
        schedule.putExtra(CalendarContract.Events.TITLE, "Title");
        schedule.putExtra(CalendarContract.Events.EVENT_LOCATION, "Location");
        startActivity(schedule);
        }
    });

I have edited my code to accommodate a suggestion:

private void selectTime()
{
    TimePickerDialog tpd = new TimePickerDialog(getActivity(),
            new TimePickerDialog.OnTimeSetListener()
            {

                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute)
                {
                     c.set(Calendar.HOUR_OF_DAY, hourOfDay);
                     c.set(Calendar.MINUTE, minute);

                    Toast.makeText(getActivity(), hourOfDay + ":" + minute, Toast.LENGTH_LONG).show();
                }
            }, mHour, mMinute, false);
    tpd.show();
}

 private void selectDate()
{
    DatePickerDialog dpd = new DatePickerDialog(getActivity(),
            new DatePickerDialog.OnDateSetListener()
            {

                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                {
                    c.set(year, monthOfYear, dayOfMonth);

                    Toast.makeText(getActivity(), dayOfMonth + "-" + (monthOfYear + 1) + "-" + year, Toast.LENGTH_LONG).show();
                }
            }, mYear, mMonth, mDay);
    dpd.show();
}

Now, the time & date both perfectly changes/updates every time i create a new event!Thanks


Solution

  • You could make a Calendar instance variable:

    Calendar calendar = Calendar.getInstance();
    

    Set its values from onDateSet() and onTimeSet():

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        calendar.set(year, monthOfYear, dayOfMonth);
    }
    
    // ...
    
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute)
    {
        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calendar.set(Calendar.MINUTE, minute);
    }
    

    And then pass the value of this Calendar instance as millis from epoch:

    schedule.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
        calendar.getTimeInMillis());