从日期和时间选择器中选择日期和时间后,如何将它们作为参数传递给日历的 'Create Event' 函数?
After picking date and time from Date & Time Picker, how to pass them as parameters in 'Create Event' function of Calendars?
我有一个 Android Studio 的日期和时间选择器小部件,我从中选择了特定的日期 (dd-mm-yy) 格式和时间 (hr:min) 格式。
现在,在同一个 Activity
中,我有一个 'Submit' 按钮;通过单击它,我将几个参数传递给 phone 的 'Create Event'本机日历。
虽然我可以成功传递标题、描述、位置等,但我不知道如何传递我从日期和时间选择器中选择的 'Start-End Date' & 'Start-End' 时间参数到本机日历。
谢谢。
这里是相同的简短代码:
1> 选择日期函数:
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> 选择时间功能:
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) 点击提交按钮:
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);
}
});
我已编辑代码以采纳建议:
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();
}
现在,每次创建新活动时,时间和日期都完美 changes/updates!谢谢
在 activity
中创建一个 Date 对象
private Date date = null;
在构造函数中:
date = new Date();
在 onDateSet
中设置
date.setYear(year);
date.setMonth(monthOfYear);
date.setDate(dayOfMonth);
在 onTimeSet
date.setHours(hourOfDay);
date.setMinutes(minute);
然后你可以在提交功能中使用这个日期
您可以创建一个 Calendar
实例变量:
Calendar calendar = Calendar.getInstance();
设置其值 onDateSet()
和 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);
}
然后将此 Calendar
实例的值作为纪元的毫秒传递:
schedule.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
calendar.getTimeInMillis());
看起来有点旧,但你可以试试这个http://www.vogella.com/tutorials/AndroidCalendar/article.html
它将 GregorianCalendar 参数传递给 api.
否则转到文档 https://developer.android.com/guide/topics/providers/calendar-provider.html
在 使用意图插入事件 部分作为示例。
Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 9, 14, 7, 30);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 9, 14, 8, 45);
endMillis = endTime.getTimeInMillis();
...
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(Events.DTSTART, startMillis);
values.put(Events.DTEND, endMillis);
我有一个 Android Studio 的日期和时间选择器小部件,我从中选择了特定的日期 (dd-mm-yy) 格式和时间 (hr:min) 格式。
现在,在同一个 Activity
中,我有一个 'Submit' 按钮;通过单击它,我将几个参数传递给 phone 的 'Create Event'本机日历。
虽然我可以成功传递标题、描述、位置等,但我不知道如何传递我从日期和时间选择器中选择的 'Start-End Date' & 'Start-End' 时间参数到本机日历。
谢谢。
这里是相同的简短代码:
1> 选择日期函数:
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> 选择时间功能:
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) 点击提交按钮:
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);
}
});
我已编辑代码以采纳建议:
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();
}
现在,每次创建新活动时,时间和日期都完美 changes/updates!谢谢
在 activity
中创建一个 Date 对象private Date date = null;
在构造函数中:
date = new Date();
在 onDateSet
中设置
date.setYear(year);
date.setMonth(monthOfYear);
date.setDate(dayOfMonth);
在 onTimeSet
date.setHours(hourOfDay);
date.setMinutes(minute);
然后你可以在提交功能中使用这个日期
您可以创建一个 Calendar
实例变量:
Calendar calendar = Calendar.getInstance();
设置其值 onDateSet()
和 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);
}
然后将此 Calendar
实例的值作为纪元的毫秒传递:
schedule.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
calendar.getTimeInMillis());
看起来有点旧,但你可以试试这个http://www.vogella.com/tutorials/AndroidCalendar/article.html 它将 GregorianCalendar 参数传递给 api.
否则转到文档 https://developer.android.com/guide/topics/providers/calendar-provider.html 在 使用意图插入事件 部分作为示例。
Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 9, 14, 7, 30);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 9, 14, 8, 45);
endMillis = endTime.getTimeInMillis();
...
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(Events.DTSTART, startMillis);
values.put(Events.DTEND, endMillis);