어플 개발 중에 안드로이드 내부 일정을 등록하고 삭제하는 부분을 넣었습니다. 근데 제 폰(디자이어 : froyo)에서는 등록/삭제가 정상적으로 되는데 어제 갤럭시S에서 테스트했더니 일정이 등록은 되는데 삭제할 때 Can't Delete the URL이 됩니다.

첫번째 함수는 등록하는 함수이고 두번째 함수가 일정에서 삭제하는 함수입니다. 등록은 디자이어/갤s 모두 잘 됩니다만 삭제할 때 갤s가 Exception이 뜹니다.
아래 소스 보면 SDK_INT를 확인해서 7(eclair)일 경우에는
Uri.parse("content://calendar/events")로 하고 froyo 일때는 Uri.parse("content://com.android.calendar/events")로 합니다.

현재 캘린더가 Public이 아니라서 구글링해도 잘 안나오네요 ㅠ
그리고 전체 소스는 네이버 개발자 센터에 오픈소스로 등록되어 있습니다. 자라섬 국제 재즈 페스트발로 검색하시면 됩니다.


protected void sendSchedule(int year, int month, JJdata data) {
  Uri calendars = null;
  Calendar calStTime = Calendar.getInstance();
  Calendar calEndTime = Calendar.getInstance();
  
  int startHour = Integer.parseInt(data.getPerf_st_time().substring(0, 2));
  int startMinute = Integer.parseInt(data.getPerf_st_time().substring(3, 5));
  
  int endHour = Integer.parseInt(data.getPerf_end_time().substring(0, 2));
  int endMinute = Integer.parseInt(data.getPerf_end_time().substring(3, 5));
  
  calStTime.set(Calendar.YEAR, year);
  calStTime.set(Calendar.MONTH, month-1);
  calStTime.set(Calendar.DATE , PERF_DAYS[data.getPerf_day()-1]);
  calStTime.set(Calendar.HOUR_OF_DAY, startHour);
  calStTime.set(Calendar.MINUTE, startMinute);
  
  calEndTime.set(Calendar.YEAR, year);
  calEndTime.set(Calendar.MONTH, month-1);
  calEndTime.set(Calendar.DATE , PERF_DAYS[data.getPerf_day()-1]);
  calEndTime.set(Calendar.HOUR_OF_DAY, endHour);
  calEndTime.set(Calendar.MINUTE, endMinute);
  
  if(android.os.Build.VERSION.SDK_INT == 7){
   calendars = Uri.parse("content://calendar/calendars");
  }else{  
   calendars = Uri.parse("content://com.android.calendar/calendars");
  }
  
  String[] projection = new String[] { "_id", "name" };
  Cursor managedCursor = getContentResolver().query(calendars, projection, "selected=1", null, null);
  if (managedCursor.moveToFirst()) {
   String[] CalNames = new String[managedCursor.getCount()];
   int[] CalIds = new int[managedCursor.getCount()];
   for (int i = 0; i < CalNames.length; i++) {
       CalIds[i] = managedCursor.getInt(0);
       CalNames[i] = managedCursor.getString(1);
       managedCursor.moveToNext();
   }
   managedCursor.close();
   
   ContentValues cv = new ContentValues();
   cv.put("calendar_id", CalIds[0]);
   cv.put("title", data.getSinger());
   long startTime = calStTime.getTimeInMillis();
   long endTime = calEndTime.getTimeInMillis();
   cv.put("dtstart", startTime); // start time <string dd-mm-yyyy tt:mm:ss>
   cv.put("dtend", endTime); // end time <string dd-mm-yyyy tt:mm:ss>
//   cv.put("minutes", before); // alarm described as minutes before
   cv.put("allDay", 0);
   cv.put("eventStatus", 1);
   cv.put("hasAlarm", 1); // 0 for false, 1 for true
   // TODO 알람 서비스를 어떻게 할 것인가??
//   cv.put( "alarmTime", before );
   
   cv.put("eventLocation", "가평 자라섬, "+ Stages[data.getStage()-1]);
   if(android.os.Build.VERSION.SDK_INT == 7){
    Log.d("JARASUMJAZZ_LOG", "TEST1 : " + data.getSinger() + " , " + String.valueOf(startTime));
    Uri newevent = getContentResolver().insert(Uri.parse("content://calendar/events"), cv);
   }else{
    Log.d("JARASUMJAZZ_LOG", "TEST2 : " + data.getSinger() + " , " + String.valueOf(startTime));
    Uri newevent = getContentResolver().insert(Uri.parse("content://com.android.calendar/events"), cv);
   }
  }
 }

 
/**
  * @param data2 아티스트 정보 중에서 아티스트명으로 일정을 삭제한다. 중복되는 경우 
  * @throws SQLException
  */
 protected void removeSchedule(JJdata data2) throws SQLException{
  // TODO 데이터를 지울 수 있도록 한다
  Uri calendars = null;
  if(android.os.Build.VERSION.SDK_INT == 7){
   calendars = Uri.parse("content://calendar/calendars");
  }else{  
   calendars = Uri.parse("content://com.android.calendar/calendars");
  }
  
  String[] projection = new String[] { "_id", "name" };
  Cursor managedCursor = getContentResolver().query(calendars, projection, "selected=1", null, null);
  if (managedCursor.moveToFirst()) {
   String CalTitle = "";
   int CalId = 0;
   for (int i = 0; i < managedCursor.getCount(); i++) {
       CalId = managedCursor.getInt(managedCursor.getColumnIndex("_id"));
       CalTitle = managedCursor.getString(managedCursor.getColumnIndex("name"));
       managedCursor.moveToNext();
   }
   managedCursor.close();
   
   if(android.os.Build.VERSION.SDK_INT == 7){
    int newevent = getContentResolver().delete(Uri.parse("content://calendar/events"), "title=" + "'" +data2.getSinger() + "'", null);
    Log.d("JARASUMJAZZ_LOG", "TEST1 : " + newevent);
   }else{
    int newevent = getContentResolver().delete(Uri.parse("content://com.android.calendar/events"),  "title=" + "'" +data2.getSinger() + "'", null);
    Log.d("JARASUMJAZZ_LOG", "TEST2 : " + newevent);
   }
  }
 }