【问题标题】:Being aware of duplicate calendar events意识到重复的日历事件
【发布时间】:2018-06-15 12:29:12
【问题描述】:

我正在尝试将事件添加到 Android 上的日历。添加工作正常,但每次我调用 add 事件方法时,它都会创建重复项。我尝试更新事件,并删除具有特定标题的所有事件,但没有成功。

我的导入方式:

public static boolean importToCalendar(@NonNull Activity activity, CalendarEvent calendarEvent) {
        if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_CALENDAR)
                != PackageManager.PERMISSION_GRANTED)
            return false;

        removeExistingEvent(activity, calendarEvent);

        ContentValues event = new ContentValues();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
            event.put(Events.CALENDAR_ID, 3);
        else
            event.put(Events.CALENDAR_ID, 1);

        event.put(Events.TITLE, calendarEvent.getTitle());
        event.put(Events.DESCRIPTION, calendarEvent.getDescription());
        event.put(Events.DTSTART, calendarEvent.getStartTime());
        event.put(Events.DTEND, calendarEvent.getEndTime());
        event.put(Events.STATUS, calendarEvent.getEventStatus());
        event.put(Events.HAS_ALARM, calendarEvent.getHasAlarm());
        event.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

        Uri uri = activity.getContentResolver().insert(Events.CONTENT_URI, event);
        Log.d("calendar: ", "inserted " + uri);

//        long eventId = getLastEventId(uri);
        return true;
    }

removeExistingEvent 在哪里:

public static void removeExistingEvent(@NonNull Activity activity, CalendarEvent calendarEvent) {
        String[] proj =
                new String[]{
                        CalendarContract.Instances._ID,
                        CalendarContract.Instances.BEGIN,
                        CalendarContract.Instances.END,
                        CalendarContract.Instances.EVENT_ID};

        ContentResolver contentResolver = activity.getContentResolver();
        Cursor cursor = CalendarContract.Instances.query(
                contentResolver,
                proj,
                calendarEvent.getStartTime(),
                calendarEvent.getEndTime(),
                calendarEvent.getTitle());

        while (cursor.moveToNext()) {
            long id = cursor.getLong(cursor.getColumnIndex("_id"));
            Uri eventUri = ContentUris.withAppendedId(Events.CONTENT_URI, id);
            contentResolver.delete(eventUri, null, null);
            Log.d("calendar: ", "deleted" + id);
        }
    }

日志说:

W/ContentResolver:无法获取类型:content://com.android.calendar(未知 URL 内容://com.android.calendar) 06-15 12:03:22.872 9934-9934/com.ptr D/calendar::deleted482 06-15 12:03:22.899 6312-6325/com.android.providers.calendar W/ContentResolver:无法获取类型:内容://com.android.calendar(未知 URL 内容://com.android.calendar ) 06-15 12:03:22.918 9934-9934/com.ptr D/calendar:: 插入内容://com.android.calendar/events/299

任何帮助将不胜感激。

【问题讨论】:

    标签: java android google-calendar-api


    【解决方案1】:

    尝试按 eventId 删除,而不是按标题删除。您可以在Events: delete 中尝试。

    service.events().delete(calendarId='primary', eventId='eventId').execute()
    

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 2018-02-20
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多