Как запустить приложение Android Calendar с помощью Intent (Froyo) - PullRequest
20 голосов
/ 07 декабря 2010

Я хочу открыть приложение Календарь из приложения для Android. Когда я искал в Интернете, все, что я получил, это создавать новые события, используя намерение. Я мог найти Интенты, чтобы открыть Контакты, Галерею и т. Д.

Можно ли запустить календарь на определенную неделю или день? Если возможно, кто-нибудь может помочь мне с этим.

Заранее спасибо.

Ответы [ 6 ]

20 голосов
/ 07 декабря 2010
Intent intent = new Intent(Intent.ACTION_EDIT);  
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("title", "Some title");
intent.putExtra("description", "Some description");
intent.putExtra("beginTime", eventStartInMillis);
intent.putExtra("endTime", eventEndInMillis);
startActivity(intent);
9 голосов
/ 12 декабря 2014

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

1) к определенной дате 2) к определенному событию

Для этого вам необходимо добавить следующие два разрешения

  <uses-permission android:name="android.permission.READ_CALENDAR" />
  <uses-permission android:name="android.permission.WRITE_CALENDAR" />

1) по определенной дате:

Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
builder.appendPath("time");
ContentUris.appendId(builder, Calendar.getInstance().getTimeInMillis());
Intent intent = new Intent(Intent.ACTION_VIEW)
    .setData(builder.build());
startActivity(intent);

2) по конкретному событию:

long eventID = 200;

Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
Intent intent = new Intent(Intent.ACTION_VIEW).setData(uri);
startActivity(intent);

Примечание. * Поставщик контента CalendarContract был добавлен в Android SDK на уровне API 14.Для получения дополнительной информации вы можете посетить эту ссылку

3 голосов
/ 29 января 2013

Использование намерений для просмотра данных календаря

Поставщик календаря предлагает два различных способа использования намерения ПРОСМОТР:

To open the Calendar to a particular date.
To view an event.

добавить разрешения для манифеста

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />

Здесьпример, который показывает, как открыть календарь на определенную дату:

 // A date-time specified in milliseconds since the epoch. 
 long startMillis;
 ...
 Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();   
 builder.appendPath("time");
 ContentUris.appendId(builder, startMillis);
 Intent intent = new Intent(Intent.ACTION_VIEW)
     .setData(builder.build());
   startActivity(intent);

Вот пример, который показывает, как открыть событие для просмотра:

long eventID = 208;
...
Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
Intent intent = new Intent(Intent.ACTION_VIEW)
   .setData(uri);

    startActivity(intent);

Is it possible to launch the Calendar to a specific week or day?

Итак, теперь это возможно, но требуется min API 14.

Для более подробной информации посетите http://developer.android.com/guide/topics/providers/calendar-provider.html#intents

3 голосов
/ 20 февраля 2011

После просмотра приложения Календарь в исходном коде Android вы можете напрямую вызывать AgendaActivity.Другие не будут работать.Как отмечали другие авторы, вы можете напрямую взаимодействовать с курсором для чтения / создания событий, но вы не можете вызвать приложение календаря для представления, отличного от AgendaView.Причина в том, что разработчики ограничили эту возможность в манифесте для приложения Cal, используя следующие определения действий:

    <activity android:name="MonthActivity" android:label="@string/month_view"
        android:theme="@style/CalendarTheme" />
    <activity android:name="WeekActivity" android:label="@string/week_view"
        android:theme="@style/CalendarTheme" />
    <activity android:label="@string/day_view" android:name="DayActivity"     
        android:theme="@style/CalendarTheme"/>
    <activity android:name="AgendaActivity" android:label="@string/agenda_view"
        android:theme="@android:style/Theme.Light"
        android:exported="true" />

Обратите внимание, что только AgendaActivity имеет android: exported = "true".Если вы попытаетесь вызвать другие действия, вы получите разрешение на исключение.

Однако вы можете вызвать AgendaActivity к произвольному дню с помощью следующего кода:

    Calendar tempCal = (Calendar) mCalendar.clone();
    tempCal.set(year, month, day); 
    Intent calendarIntent = new Intent() ;
    calendarIntent.putExtra("beginTime", tempCal.getTimeInMillis());
    calendarIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    calendarIntent.setClassName("com.android.calendar","com.android.calendar.AgendaActivity");
    startActivity(calendarIntent);
1 голос
/ 07 декабря 2010

AgendaActivity загружает представление «Повестка дня».

Исходя из моего опыта, вы не можете глубоко связать действия «День», «Неделя» и «Месяц» со стандартным Android, однако вы можете использовать «LaunchActivity», которая загружает последнее открытое представление.

0 голосов
/ 07 декабря 2010

В процессе утомительного эксперимента я обнаружил, что:

Intent calendarIntent = new Intent() ;<br> calendarIntent.setClassName("com.android.calendar","com.android.calendar.AgendaActivity");

... работает для меня, чтобы запустить Календарную Активность.Не пробовал, но, возможно, com.android.calendar.DayActivity, .WeekActivity и .MonthActivity запустит соответствующие действия.

...