Статьи

Android Essentials: добавление событий в календарь пользователя

Последняя версия Android SDK под кодовым названием Ice Cream Sandwich была доступна разработчикам на этой неделе. Впервые SDK предоставляет доступ к приложению «Календарь» законным способом. Одна из наиболее распространенных задач, которую разработчики часто хотят выполнять, — это создание новых событий в календаре пользователя, поэтому сегодня мы покажем вам, как это сделать.

Календарь — это обычное приложение, которое пользователи используют на своих устройствах Android. Приложения могут получать доступ к Календарю с помощью новых API, доступных в Android 4.0. Добавление новых событий в Календарь простое и не требует специальных разрешений приложения.

Примечание. Пользователь отвечает за настройку приложения Календарь с соответствующими учетными записями Календаря (например, Microsoft Exchange).

В этом руководстве предполагается, что у вас есть проект, который поддерживает Android 4.0 (совместимый с API Level 14) и который вы компилируете с использованием новейших инструментов. Предполагается также, что вы правильно настроили приложение Календарь на эмуляторе Android (или на подходящем устройстве, когда оно станет доступным в ближайшие недели).

Чтобы предложить пользователю создать событие календаря в его существующем календаре, вам нужно создать соответствующее намерение. Это намерение запустит приложение Календарь с экраном, который позволяет им создавать новое событие. Пользователь должен подтвердить это событие и может добавить или изменить любые данные события, связанные с этим событием.

Намерение создать событие календаря показано ниже:

1
2
3
Intent calIntent = new Intent(Intent.ACTION_INSERT);
calIntent.setData(CalendarContract.Events.CONTENT_URI);
startActivity(calIntent);

Этот код просто запускает намерение. Он не устанавливает никаких календарных данных, связанных с событием.

Вы можете заполнить информацию, связанную с событием календаря, указав ряд дополнительных функций. Дополнительные функции могут использоваться для описания подробностей события, даты и времени события, а также параметров календарного события, например, может ли событие быть просмотрено другими и занято ли оно или доступно. Типичные настройки событий календаря доступны как Дополнительные. Например, следующий намеренный вызов предоставляет некоторую информацию о заголовке и описании события:

1
2
3
4
5
6
Intent calIntent = new Intent(Intent.ACTION_INSERT);
calIntent.setType(«vnd.android.cursor.item/event»);
calIntent.putExtra(Events.TITLE, «My House Party»);
calIntent.putExtra(Events.EVENT_LOCATION, «My Beach House»);
calIntent.putExtra(Events.DESCRIPTION, «A Pig Roast on the Beach»);
startActivity(calIntent);

Здесь мы устанавливаем заголовок, местоположение и доступ к описанию события, используя соответствующее намерение Доп. Эти поля будут установлены в форме, отображаемой для подтверждения пользователем события в его календаре.

События календаря связаны с конкретными датами и временем. Некоторые события имеют определенное временное окно, а другие — события «весь день». Вы можете указать дату и время события, используя дополнительные функции.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
Intent calIntent = new Intent(Intent.ACTION_INSERT);
calIntent.setType(«vnd.android.cursor.item/event»);
calIntent.putExtra(Events.TITLE, «My House Party»);
calIntent.putExtra(Events.EVENT_LOCATION, «My Beach House»);
calIntent.putExtra(Events.DESCRIPTION, «A Pig Roast on the Beach»);
 
GregorianCalendar calDate = new GregorianCalendar(2012, 7, 15);
calIntent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
calIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
     calDate.getTimeInMillis());
calIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
     calDate.getTimeInMillis());
 
startActivity(calIntent);

Здесь мы устанавливаем событие на весь день в определенную дату. Вы также можете установить гораздо более детализированные события, просто используя два дополнения для времени начала и окончания.

Есть еще несколько других полезных дополнений, которые вы можете посеять. Они включают в себя, могут ли другие видеть событие (уровень доступа) и должно ли время показываться как занятое или доступное (доступность)

Вы можете установить эти дополнения следующим образом:

1
2
calIntent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
calIntent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY

Здесь мы включаем дополнительную настройку, чтобы установить доступ этого события в календаре к частному. Мы устанавливаем доступность во время периода события на занятость (никакие другие события не могут перекрываться).

Есть разовые события, такие как свиное жаркое, а затем — повторяющиеся события, такие как еженедельные встречи. Вы можете заполнить правило повторения, используя дополнительное намерение, например так:

1
calIntent.putExtra(Events.RRULE, “FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH”);

Дополнительное намерение RRULE принимает стандартный формат правила повторения iCalendar (подробнее см. RFC 5544 ). Например, приведенное выше создает правило повторения для события, которое происходит каждый вторник и четверг в течение 5 недель.

Приложение «Календарь» уже давно доступно на платформе Android, но до сих пор не было документированных API-интерфейсов для доступа к нему. Android 4.0 (уровень API 14) включает в себя полный поставщик содержимого календаря, который можно использовать для доступа к информации календаря пользователя, при условии, что приложение имеет соответствующие разрешения. Однако одна из самых простых и распространенных задач, добавление нового события в календарь пользователя, не требует специальных разрешений и очень проста в реализации.

Разработчики мобильных приложений Лорен Дарси и Шейн Кондер являются соавторами нескольких книг по разработке Android: углубленная книга по программированию под названием « Разработка беспроводных приложений для Android» и « Самс научи себя разрабатывать приложения для Android за 24 часа» . Когда они не пишут, они тратят свое время на разработку мобильного программного обеспечения в своей компании и оказание консультационных услуг. С ними можно связаться по электронной почте [email protected] , через их блог на androidbook.blogspot.com и в Twitter @androidwireless .