ㅈㅅㄹ

예전에 쓴 안드로이드 캘린더 연동 앱 만들기와 어느정도 관계 있는 얘기인데, 오늘 보니 캘린더 쪽 Provider에서 duration 값이, 몇 가지 ICS 버전 안드로이드 단말들에서 이상하게 올라오는 현상이 있었다. 아직 안드로이드 ICS 버전 전체의 문제인지 특정 단말군만 그런건지, 이러한 현상이 발생하지 않는 ICS 버전 단말을 발견하지 못해서 정확하게는 확신하지 못하지만, 어쨌든 특정 단말이나 특정 제조사에서만 나는건 아닌 듯 하니 일단은 ICS 버전 안드로이드 단말에서 발생한다고 의심해 본다.


duration값은 RFC2445의 dur-value 형식에 따라 표현되는데, 일단 해당 derivation rule 부터 살펴보자.


dur-value = (["+"] / "-") "P" (dur-date / dur-time / dur-week)


     dur-date   = dur-day [dur-time]
     dur-time   = "T" (dur-hour / dur-minute / dur-second)
     dur-week   = 1*DIGIT "W"
     dur-hour   = 1*DIGIT "H" [dur-minute]
     dur-minute = 1*DIGIT "M" [dur-second]
     dur-second = 1*DIGIT "S"
     dur-day    = 1*DIGIT "D"


그러니까 위의 derivation rule에 따르면, 만약 어떤 일정이 3일동안 진행된다고 할 때 "P3D"가 되겠고, 3일 1시간이라면 "P3DT1H", 그리고 단순히 한시간동안 진행된다면 "PT1H"가 되어야 한다. 그런데 문제가 되는 단말들에서는 dur-time 이 "T" prefix 없이 만들어지는 문제가 있다. 그러니까 가령 1시간 동안 진행되는 이벤트가 "P1H" 처럼 내려온다는 얘기이다.


대충 찾아서 그런가 관련해서는 특별히 버그 리포팅이 된 게 없는 듯 한데, 일단은 캘린더 연동 앱을 만들 때 ICS 버전에서 발생할 수 있는 이러한 버그에 대해서도 염두해 둘 필요가 있겠다... 는 얘기를 하고 싶었다.