Как запустить приложение Android Calendar с помощью Intent (Froyo)
Я хочу открыть приложение "Календарь" из приложения Android. Когда я искал в Интернете, все, что я получил, - это создание новых событий с использованием намерений. Я мог бы найти Intents для открытия контактов и галереи и т.д.
Можно ли запустить Календарь на определенную неделю или неделю? Если возможно, кто-то может помочь мне с этим.
Спасибо заранее.
Ответы
Ответ 1
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);
Ответ 2
Вы можете открыть Calendar View двумя способами:
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
После просмотра приложения Calendar в исходном коде 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);
Ответ 4
Использование намерений для просмотра данных календаря
Поставщик календаря предлагает два разных способа использования намерения VIEW:
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
Ответ 5
AgendaActivity загружает представление "Повестка дня".
Из моего опыта вы не можете глубоко связать деятельность Day, Week и Month на складе Android, однако вы можете использовать "LaunchActivity", который загружает последний открытый вид.
Ответ 6
В процессе утомительного эксперимента я обнаружил, что:
Intent calendarIntent = new Intent() ;
calendarIntent.setClassName("com.android.calendar","com.android.calendar.AgendaActivity");
... работает для меня, чтобы запустить мероприятие по календарной повестке дня. не
но, возможно, com.android.calendar.DayActivity,
.WeekActivity и .MonthActivity запустит соответствующий
Деятельность.