Открыть и отобразить календарь событий в Android - PullRequest
5 голосов
/ 20 марта 2011

Есть много примеров того, как создать новое событие календаря в Android, но нет примеров того, как открыть и отобразить событие.Пока это мой код

 public static void startCalendarMimeType(Context context, CalendarItem item){
    //all version of android
     Intent i = new Intent();

     // mimeType will popup the chooser any  for any implementing application (e.g. the built in calendar or applications such as "Business calendar"
     i.setType("vnd.android.cursor.item/event");
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     // the time the event should start in millis. This example uses now as the start time and ends in 1 hour
     //i.putExtra("beginTime", item.getBegin()); 
     //i.putExtra("endTime", item.getEnd());
     i.putExtra("_id", item.getId());


     // the action
     //i.setAction(Intent.ACTION_PICK);
     context.startActivity(i);
}

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

В этот момент вы можете выбрать приложение для открытия. Если вы выберите «Показать событие», оно откроет приложение календаря, но получит исключение нулевого указателя, и я просто не могу понять, что я делаю неправильноВот.Я первый, кто пытается это сделать?

Любая помощь очень ценится

Ответы [ 2 ]

11 голосов
/ 09 мая 2011

Я наконец нашел решение:

Intent intent = new Intent(Intent.ACTION_VIEW);
//Android 2.2+
intent.setData(Uri.parse("content://com.android.calendar/events/" + String.valueOf(calendarEventID)));  
//Android 2.1 and below.
//intent.setData(Uri.parse("content://calendar/events/" + String.valueOf(calendarEventID)));    
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
        | Intent.FLAG_ACTIVITY_SINGLE_TOP
        | Intent.FLAG_ACTIVITY_CLEAR_TOP
        | Intent.FLAG_ACTIVITY_NO_HISTORY
        | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
context.startActivity(intent);

Я надеюсь, что некоторые из вас найдут это полезным.

Я также добавил несколько других элементов календаря ниже:

/**
 * Add a calendar event.
 */
private void addCalendarEvent(){
    Context context = getContext();
    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setType("vnd.android.cursor.item/event");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
            | Intent.FLAG_ACTIVITY_SINGLE_TOP
            | Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_NO_HISTORY
            | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    context.startActivity(intent);
}

/**
 * Edit a calendar event.
 */
private void editCalendarEvent(){
    Context context = getContext();
    long calendarEventID = .....
    intent.setData(Uri.parse("content://com.android.calendar/events/" + String.valueOf(calendarEventID)));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
        | Intent.FLAG_ACTIVITY_SINGLE_TOP
        | Intent.FLAG_ACTIVITY_CLEAR_TOP
        | Intent.FLAG_ACTIVITY_NO_HISTORY
        | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
   context.startActivity(intent);
}

Дайте мне знать, если у кого-то есть вопросы или есть лучший способ выполнить ту же задачу.

2 голосов
/ 20 марта 2011

Есть много примеров того, как создать новое событие календаря в Android

Ни один из этих "примеров" не должен использоваться, поскольку в Android нет задокументированного и поддерживаемого API для календаря.

, но не о том, как открыть и отобразить событие

Вам необходимо связаться с авторами любой сторонней программы-календаря, с которой вы пытаетесь интегрироваться, и спросить их, как это сделать. Если вы пытаетесь интегрироваться с приложением «Календарь», которое является частью проекта Android с открытым исходным кодом, для этого приложения нет документированного и поддерживаемого API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...