4

機能の 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 と正しく同期されるので、可能のようです。しかし、私のアプリからは、それを機能させるのに苦労しています。

4

1 に答える 1

2

Calendars.OWNER_ACCOUNTContentValues で を指定するとうまくいくはずです。

ContentValues values = new ContentValues();
...
values.put(Calendars.OWNER_ACCOUNT, ACCOUNT_NAME);

挿入する前に、CONTENT_URI に ACCOUNT_NAME と ACCOUNT_TYPE を含める必要があります

Uri contentUri CalendarContract.Calendars.CONTENT_URI
        .buildUpon()
        .appendQueryParameter(Calendars.ACCOUNT_NAME, ACCOUNT_NAME)
        .appendQueryParameter(Calendars.ACCOUNT_TYPE, "com.google")
        .build();

今挿入:

Uri uri = cr.insert(contentUri, values);
于 2012-05-12T03:26:36.263 に答える