Подтвердить что ты не робот

Как запустить приложение Android Calendar с помощью Intent (Froyo)

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

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

Спасибо заранее.

4b9b3361

Ответ 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 запустит соответствующий Деятельность.