API 호출을 통해 서버에서 이벤트 목록 (일주일)을 얻었고 내 앱은 캘린더와 동기화해야합니다. 이벤트는 앱에서 인터뷰를하지 않고 서버에서 업데이트하거나 삭제할 수 있습니다. 그리고 화면을 새로 고침 할 때마다 캘린더에 동기화해야합니다. Android 캘린더에서 이벤트가 중복되지 않도록하려면 어떻게해야하나요?
내 서버와 최신 일정까지 내 이벤트를 만들려면, 나는 새로 고침 다음 작업을 수행하고 있습니다 :- 일정에서 주어진 일주일의 모든 이벤트를 삭제.
그런 다음 서버에서 가져온 이벤트를 삽입하십시오.
public static void doAddCalendarEvent(MyEvent myEvent, Activity activity, int calendarId) { try { if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { return; } String desc = myEvent.getDesc(); desc += "\n\n Added by MyApp"; ContentResolver cr = activity.getContentResolver(); ContentValues values = new ContentValues(); values.put(Events.DTSTART, myEvent.getEventStartTime()); values.put(Events.DTEND, myEvent.getEventEndTime()); values.put(Events.TITLE, myEvent.getTitle()); values.put(Events.DESCRIPTION, desc); values.put(Events.CALENDAR_ID, calendarId); values.put(Events.EVENT_LOCATION, myEvent.getLocation()); values.put(Events.STATUS, Events.STATUS_CONFIRMED); values.put(Events.AVAILABILITY, Events.AVAILABILITY_BUSY); if (hasAlarm) { values.put(Events.HAS_ALARM, true); } values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); long eventId = 0; Uri uri = cr.insert(Events.CONTENT_URI, values); if (uri != null) { eventId = Long.parseLong(uri.getLastPathSegment()); Log.v(TAG, "INSERTED EVENT ID=>" + eventId + "--->" + startDate); } if (hasAlarm) { setReminder(cr, reminderValue, eventId); } } catch (Exception e) { e.printStackTrace(); } }
문제
가 : 때때로 이벤트가 달력에 중복 여기에public static void deleteAllEventsInWeekOfCalendar(Activity activity, int calId, long weekStartTimeMillis, long weekEndTimeMillis) { try { Uri eventUri = Uri.parse("content://com.android.calendar/events"); String[] projection = new String[]{Events._ID, Events.TITLE, Events.DTSTART, Events.DESCRIPTION}; String whereClause = Events.CALENDAR_ID + "=" + calId + " AND " + Events.DTSTART + " >= " + weekStartTimeMillis + " AND " + Events.DTSTART + " <= " + weekEndTimeMillis + " AND " + Events.DESCRIPTION + " LIKE '% Added by MyApp'"; Cursor cursor = activity.getContentResolver().query(eventUri, projection, whereClause, null, Events.DTSTART); if (cursor != null && cursor.moveToFirst()) { Log.v("HowMany", cursor.getCount() + " matching events Found"); int numOfDeleted = 0; do { try { String event_id = cursor.getString(cursor.getColumnIndexOrThrow(projection[0])); int numOfRowsDeleted = activity.getContentResolver().delete(ContentUris.withAppendedId(eventUri, Long.parseLong(event_id)), null, null); if (numOfRowsDeleted == 1) { ++numOfDeleted; } } catch (Exception e) { e.printStackTrace(); } } while (cursor.moveToNext()); cursor.close(); Log.v("HowMany", numOfDeleted + " deleted"); } } catch (Exception e) { e.printStackTrace(); } }
그리고
는 일정에 모든 이벤트를 삽입하는 내 코드입니다. 중복을 피하려면 어떻게해야합니까? 어디가 잘못 됐어? 제발 제안 해주세요.