5

私がやりたいのは、カレンダーにすでに存在するすべてのコンテンツではなく、カレンダーに保存されているコンテンツのみを削除することです。そのために、私は次のコードを使用します。ただし、カレンダーのすべてのコンテンツが削除されます。それで、それを防ぐ方法を誰かに教えてもらえますか?

Uri CALENDAR_URI = Uri.parse("content://calendar/events");
ContentResolver cr = getContentResolver();
cr.delete(CALENDAR_URI, null, null); // Delete all



ContentValues values = new ContentValues();
values.put("calendar_id", 1);
values.put("title", this.title);
values.put("allDay", this.allDay);
values.put("dtstart", this.dtstart.toMillis(false));
values.put("dtend", this.dtend.toMillis(false));
values.put("description", this.description);
values.put("eventLocation", this.eventLocation);
values.put("visibility", this.visibility);
values.put("hasAlarm", this.hasAlarm);

cr.insert(CALENDAR_URI, values);

だから私が欲しいのは、私が置いたそのエントリだけを削除することです。

イベントを削除する

Uri EVENTS_URI = Uri.parse("content://com.android.calendar/" + "events");
            
ContentResolver cr = c.getContentResolver();
deleteEvent(cr, EVENTS_URI, 1);

private void deleteEvent(ContentResolver resolver, Uri eventsUri, int calendarId) {
        Cursor cursor;     
        cursor = resolver.query(eventsUri, new String[]{ "_id" },     "calendar_id=" + calendarId, null, null);
        while(cursor.moveToNext()) {
            long eventId = cursor.getLong(cursor.getColumnIndex("_id"));
            resolver.delete(ContentUris.withAppendedId(eventsUri, eventId), null, null);
        }
        cursor.close();
    }
4

1 に答える 1

5

カレンダーからデータを読み取った後、これを試してみてください。

カレンダーへの単一発生イベントの追加

特定のカレンダーにエントリを追加するには、次のようにContentValuesを使用して挿入するカレンダーエントリを構成する必要があります。

ContentValues event = new ContentValues();

各イベントは特定のカレンダーに関連付ける必要があるため、最初に設定するのは、このイベントを挿入するカレンダーの識別子です。

event.put("calendar_id", calId);

次に、イベントのタイトル、説明、場所などの文字列フィールドなど、イベントに関する基本情報の一部を設定します。

event.put("title", "Event Title");
event.put("description", "Event Desc");
event.put("eventLocation", "Event Location");

イベントの日時を構成するには、さまざまなオプションがあります。

イベントの開始情報と終了情報は次のように設定できます。

long startTime = START_TIME_MS;
long endTime = END_TIME_MS;
event.put("dtstart", startTime);
event.put("dtend", endTime);

誕生日または休日を追加する場合は、エントリを終日のイベントに設定します。

event.put("allDay", 1);   // 0 for false, 1 for true

この情報は、ほとんどのエントリに十分です。ただし、他にも便利なカレンダーエントリ属性がいくつかあります。

たとえば、イベントステータスを暫定(0)、確認済み(1)、またはキャンセル済み(2)に設定できます。

event.put("eventStatus", 1);

可視性をデフォルト(0)、機密(1)、プライベート(2)、またはパブリック(3)に設定することで、このイベントを表示できるユーザーを制御できます。

event.put("visibility", 0);

イベントの透明度を不透明(0)または透明(1)に設定することにより、カレンダーでイベントが時間を消費する(スケジュールの競合が発生する可能性がある)かどうかを制御できます。

event.put("transparency", 0);

次のように、イベントがリマインダーアラームをトリガーするかどうかを制御できます。

event.put( "hasAlarm"、1); // falseの場合は0、trueの場合は1

カレンダーイベントが正しく構成されたら、を使用してContentResolver、カレンダーイベントの適切なURIに新しいカレンダーエントリを挿入する準備が整います。

 Uri eventsUri = Uri.parse("content://calendar/events");
  Uri url = getContentResolver().insert(eventsUri, event);

insert()メソッドの呼び出しは、Calendarコンテンツプロバイダーに接続し、適切なユーザーCalendarにエントリを挿入しようとします。カレンダーアプリケーションに移動して起動すると、適切なカレンダーにカレンダーエントリが表示されます。カレンダーは同期されるため、ウェブ上でGoogleカレンダーを使用している場合は、オンラインでもカレンダーエントリが表示されます。

イベントを削除する

 private int DeleteCalendarEntry(int entryID) {
        int iNumRowsDeleted = 0;

        Uri eventsUri = Uri.parse(getCalendarUriBase()+"events");
        Uri eventUri = ContentUris.withAppendedId(eventsUri, entryID);
        iNumRowsDeleted = getContentResolver().delete(eventUri, null, null);

        Log.i(DEBUG_TAG, "Deleted " + iNumRowsDeleted + " calendar entry.");

        return iNumRowsDeleted;
    }

削除するには、このリンクも参照してください

于 2011-08-03T10:15:13.450 に答える