안녕하세요... 안드로이드에 일정(calendar)을 읽어서 제가 만든 프로그램에 넣는 작업을 하고 있는데요.
갤S일정에 보면 음력으로 일정을 넣을 수 있는데... 읽어와서 보면 그걸 어떻게 알 수 있는 지 해서요...
구글링을 해서 얻은 정보 에서 Events 테이블의 정보를 참조해서 하고 있는데요...  아무리 봐도 저 테이블의 내용중에서 어떤게 음력이라는 표시 인지 알 수 가 없습니다.  어떻게 하면 알 수 있을까요 ???  한가지 알아낸 것은 rrule 라는 변수에 들어가는 값이 반복주기이 들어가는  등등을 어떤 기준에 의해서 넣고 있는 것 같기는 합니다만... 혹시 헛다리를 집고 있는 것은 아닌가 하는 생각도 들구요 ???

<<< 읽어오는 샘플 소스 >>>

        if (android.os.Build.VERSION.SDK_INT == 7) {
            calendars = Uri.parse("content://calendar/events") ;
           } else {
            calendars = Uri.parse("content://com.android.calendar/events") ;
           }
           
           String[] projection = new String[] {
             "calendar_id",
             "htmlUri",
             "title",
             "eventLocation",
             "description",
             "eventStatus",
             "selfAttendeeStatus",
             "commentsUri",
             "dtstart",
             "dtend",
             "eventTimezone",
             "duration",
             "allDay",
             "visibility",
             "transparency",
             "hasAlarm",
             "hasExtendedProperties",
             "rrule",
             "rdate",
             "exrule",
             "exdate",
             "originalEvent",
             "originalInstanceTime",
             "originalAllDay",
             "lastDate",
             "hasAttendeeData",
             "guestsCanModify",
             "guestsCanInviteOthers",
             "guestsCanSeeGuests",
             "organizer",
             "deleted"
             //"dtstart2",
             //"dtend2",
             //"eventTimezone2",
             //"syncAdapterData"
             } ;
           Cursor managedCursor = getContentResolver().query(calendars, projection, "selected=1", null, null) ;
           
           if(managedCursor.moveToFirst()) { 
            int[] calendar_id               = new int[managedCursor.getCount()];
            String[] htmlUri                = new String[managedCursor.getCount()];
            String[] title                  = new String[managedCursor.getCount()];
            String[] eventLocation          = new String[managedCursor.getCount()];
            String[] description            = new String[managedCursor.getCount()];
            int[] eventStatus               = new int[managedCursor.getCount()];
            int[] selfAttendeeStatus        = new int[managedCursor.getCount()];
            String[] commentsUri            = new String[managedCursor.getCount()];
            String[] dtstart                = new String[managedCursor.getCount()];
            String[] dtend                  = new String[managedCursor.getCount()];
            String[] eventTimezone          = new String[managedCursor.getCount()];
            String[] duration               = new String[managedCursor.getCount()];
            int[] allDay                    = new int[managedCursor.getCount()];
            int[] visibility                = new int[managedCursor.getCount()];
            int[] transparency              = new int[managedCursor.getCount()];
            int[] hasAlarm                  = new int[managedCursor.getCount()];
            int[] hasExtendedProperties     = new int[managedCursor.getCount()];
            String[] rrule                  = new String[managedCursor.getCount()];
            String[] rdate                  = new String[managedCursor.getCount()];
            String[] exrule                 = new String[managedCursor.getCount()];
            String[] exdate                 = new String[managedCursor.getCount()];
            String[] originalEvent          = new String[managedCursor.getCount()];
            int[] originalInstanceTime      = new int[managedCursor.getCount()];
            int[] originalAllDay            = new int[managedCursor.getCount()];
            String[] lastDate               = new String[managedCursor.getCount()];
            int[] hasAttendeeData           = new int[managedCursor.getCount()];
            int[] guestsCanModify           = new int[managedCursor.getCount()];
            int[] guestsCanInviteOthers     = new int[managedCursor.getCount()];
            int[] guestsCanSeeGuests        = new int[managedCursor.getCount()];
            String[] organizer              = new String[managedCursor.getCount()];
            int[] deleted                   = new int[managedCursor.getCount()];
            //int[] dtstart2                = new int[managedCursor.getCount()];
            //int[] dtend2                  = new int[managedCursor.getCount()];
            //String[] eventTimezone2       = new String[managedCursor.getCount()];
            //String[] syncAdapterData      = new String[managedCursor.getCount()];            
           
            for (int i = 0 ; i < title.length ; i++) {
             calendar_id[i] = managedCursor.getInt(0);
             htmlUri[i] = managedCursor.getString(1);
             title[i] = managedCursor.getString(2);
             eventLocation[i] = managedCursor.getString(3);
             description[i] = managedCursor.getString(4);
             eventStatus[i] = managedCursor.getInt(5);
             selfAttendeeStatus[i] = managedCursor.getInt(6);
             commentsUri[i] = managedCursor.getString(7);
             dtstart[i] = parse2Date( managedCursor.getLong(8) );
             dtend[i] = parse2Date( managedCursor.getLong(9) );
             eventTimezone[i] = managedCursor.getString(10);
             duration[i] = managedCursor.getString(11);
             allDay[i] = managedCursor.getInt(12);
             visibility[i] = managedCursor.getInt(13);
             transparency[i] = managedCursor.getInt(14);
             hasAlarm[i] = managedCursor.getInt(15);
             hasExtendedProperties[i] = managedCursor.getInt(16);
             rrule[i] = managedCursor.getString(17);
             rdate[i] = managedCursor.getString(18);
             exrule[i] = managedCursor.getString(19);
             exdate[i] = managedCursor.getString(20);
             originalEvent[i] = managedCursor.getString(21);
             originalInstanceTime[i] = managedCursor.getInt(22);
             originalAllDay[i] = managedCursor.getInt(23);
             lastDate[i] = parse2Date( managedCursor.getInt(24) );
             hasAttendeeData[i] = managedCursor.getInt(25);
             guestsCanModify[i] = managedCursor.getInt(26);
             guestsCanInviteOthers[i] = managedCursor.getInt(27);
             guestsCanSeeGuests[i] = managedCursor.getInt(28);
             organizer[i] = managedCursor.getString(29);
             deleted[i] = managedCursor.getInt(30);
             //dtstart2[i] = managedCursor.getInt(31);
             //dtend2[i] = managedCursor.getInt(32);
             //eventTimezone2[i] = managedCursor.getString(33);
             //syncAdapterData[i] = managedCursor.getString(34); 
/*
             String cacheday = null ;  //* FREQ UNTIL WKST BYMONTHDAY BYMONTH 
             int ii ;
             int del_pos = 0;
             int length = rrule[i].length() + 1 ;
             for (ii=0; ii < length; ii++) {
              arGeneral.add(rrule[i].substring(ii, ii+1));
             }
             */
             arGeneral.add( "[" +
               "01=[" + calendar_id[i]+"] "+
               "02=[" + htmlUri[i]+"] "+
               "03=[" + title[i]+"] "+ // 제목
               "04=[" + eventLocation[i]+"] "+ // 장소
               "05=[" + description[i]+"] "+ // 설명
               "06=[" + eventStatus[i]+"] "+
               "07=[" + selfAttendeeStatus[i]+"] "+ // 참석자 상태
               "08=[" + commentsUri[i]+"] "+
               "09=[dtstart:" + dtstart[i]+"] "+
               "10=[dtend:" + dtend[i]+"] "+
               "11=[" + eventTimezone[i]+"] "+
               "12=[" + duration[i]+"] "+ // 지속되는 기간
               "13=[" + allDay[i]+"] "+
               "14=[" + visibility[i]+"] "+ // 가시성
               "15=[" + transparency[i]+"] "+ // 투명도
               "16=[" + hasAlarm[i]+"] "+
               "17=[" + hasExtendedProperties[i]+"] "+ // 확장된 속성
               "18=[" + rrule[i] +"] "+
               "19=[rdate:" + rdate[i]+"] "+
               "20=[" + exrule[i]+"] "+
               "21=[exdate:" + exdate[i]+"] "+
               "22=[" + originalEvent[i]+"] "+
               "23=[" + originalInstanceTime[i]+"] "+
               "24=[" + originalAllDay[i]+"] "+
               "25=[lastDate:" + lastDate[i]+"] "+
               "26=[" + hasAttendeeData[i]+"] "+
               "27=[" + guestsCanModify[i]+"] "+
               "28=[" + guestsCanInviteOthers[i]+"] "+
               "29=[" + guestsCanSeeGuests[i]+"] "+
               "30=[" + organizer[i]+"] "+
               "31=[" + deleted[i]+"] "+ "!!!"
               ) ;
             managedCursor.moveToNext() ;
            }
            managedCursor.close();
           }
           
        
        ArrayAdapter<String> Adapter ;
        Adapter = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, arGeneral) ;
        ListView list = (ListView)findViewById(R.id.ListView) ;
        list.setAdapter(Adapter) ;
        
    }

<<< Events 테이블 구조체 >>>

CREATE TABLE Events (_id INTEGER PRIMARY KEY,
    _sync_account TEXT,
    _sync_account_type TEXT,
    _sync_id TEXT,
    _sync_version TEXT,
    _sync_time TEXT,
    _sync_local_id INTEGER,
    _sync_dirty INTEGER,
    _sync_mark INTEGER,
    calendar_id INTEGER NOT NULL,
    htmlUri TEXT,
    title TEXT,
    eventLocation TEXT,
    description TEXT,   -- 설명
    eventStatus INTEGER,
    selfAttendeeStatus INTEGER NOT NULL DEFAULT 0,
    commentsUri TEXT,
    dtstart INTEGER,
    dtend INTEGER,
    eventTimezone TEXT,
    duration TEXT,
    allDay INTEGER NOT NULL DEFAULT 0,
    visibility INTEGER NOT NULL DEFAULT 0,
    transparency INTEGER NOT NULL DEFAULT 0,
    hasAlarm INTEGER NOT NULL DEFAULT 0,
    hasExtendedProperties INTEGER NOT NULL DEFAULT 0,
    rrule TEXT,
    rdate TEXT,
    exrule TEXT,
    exdate TEXT,
    originalEvent TEXT,
    originalInstanceTime INTEGER,
    originalAllDay INTEGER,
    lastDate INTEGER,
    hasAttendeeData INTEGER NOT NULL DEFAULT 0,
    guestsCanModify INTEGER NOT NULL DEFAULT 0,
    guestsCanInviteOthers INTEGER NOT NULL DEFAULT 1,
    guestsCanSeeGuests INTEGER NOT NULL DEFAULT 1,
    organizer STRING,
    deleted INTEGER NOT NULL DEFAULT 0,
    dtstart2 INTEGER,
    dtend2 INTEGER,
    eventTimezone2 TEXT,
    syncAdapterData TEXT);