機能の 1 つにユーザーの現在のステータスが含まれる小さなアプリケーションがあります。これは、バックエンドを使用している他のユーザーに表示されます。場合によっては、ステータスをユーザーのカレンダーと同期させるオプションも必要です。
私は ICS カレンダー API を使用してこの同期を実行しており、Google カレンダーとうまく連携しています。ただし、ユーザーが Exchange アカウントと同期することを選択した場合、ステータス アイテムはステータス仮の会議出席依頼として表示されます。
私はカレンダーの経験が限られているので、Google カレンダーと引き換えに通常のイベントとして表示するには、カレンダー イベントにどのフィールドを使用すればよいかという質問があります。ユーザーにとってシームレスにすることが目的であるため、インテントを使用せずにイベントを直接挿入します。現在のコードは次のようになります (ステータスは私のステータス データ モデルです)。
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, status.StartTimeLocal.getTime());
values.put(CalendarContract.Events.DTEND, status.StopTimeLocal.getTime());
values.put(CalendarContract.Events.TITLE, status.DisplayName);
values.put(CalendarContract.Events.DESCRIPTION, status.Text);
values.put(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY);
values.put(CalendarContract.Events.STATUS, CalendarContract.Events.STATUS_CONFIRMED);
values.put(CalendarContract.Events.GUESTS_CAN_INVITE_OTHERS, false);
values.put(CalendarContract.Events.HAS_ATTENDEE_DATA, false);
values.put(CalendarContract.Events.CALENDAR_ID, mCalendarId);
values.put(CalendarContract.Events.EVENT_TIMEZONE, "Europe/Stockholm");
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
電話カレンダーに手動で新しいアイテムを追加しようとすると、Exchange と正しく同期されるので、可能のようです。しかし、私のアプリからは、それを機能させるのに苦労しています。