2012-03-11 2 views
1

사용자 캘린더에 이벤트를 추가하는 프로그램의 다른 영역에 대한 백엔드 기능을 만들고 있습니다. 기본적으로 누군가가 GUI의 옵션에서 이벤트를 선택하고 그 선택과 일치하는 일정을 이벤트에 설정하려고합니다. 코드는 내가 함께 일하고 있어요 무엇을 더 명확하게하기 위해 : 나는이 일에 대해 갈 의도를 사용하고Android 캘린더 인 텐트 사용자 정의

java.sql.Timestamp tsStart = java.sql.Timestamp.valueOf(year + "-" + month + "-" + day + " " + startHour + ":" + startMinute + ":00"); 
    java.sql.Timestamp tsEnd = java.sql.Timestamp.valueOf(year + "-" + month + "-" + day + " " + endHour + ":" + endMinute + ":00");   

    long startTime = tsStart.getTime(); 
    long endTime = tsEnd.getTime(); 

    Intent intent = new Intent(Intent.ACTION_EDIT); 
    intent.setType("vnd.android.cursor.item/event");   
    intent.putExtra("beginTime", startTime);  
    intent.putExtra("allDay", false); 
    intent.putExtra("rrule", "FREQ=WEEKLY;COUNT="+numWeeks); 
    intent.putExtra("endTime", endTime); 
    intent.putExtra("title", title); 
    intent.putExtra("description", description); 
    intent.putExtra("eventLocation", location); 
    startActivity(intent); 

,하지만 난 오히려이없는 것 몇 가지 여분이 있습니다 1 인 텐트가 시작되면 What 필드의 텍스트 항목에서 시작됩니다. 필자는이 모든 필드를 자동으로 채웠으므로 사용자는 아무 것도 할 필요가 없으며 이렇게 실행되면 키보드가 많은 공간을 차지하고 더러워 보입니다. 포커스를 텍스트 상자에 있지 않거나 뒤로 버튼을 가짜로 설정할 수있는 방법이 있습니까? 2. 인 텐트의 일부 섹션을 표시하지 않을 수 있습니까? 시간대에 질문 할 필요가 없다고 생각합니다. 하루 종일 수표가 필요하지 않습니다 (시작과 종료 시간을 알려주기 때문에). 손님이 필요하지 않습니다. 사용자 정의되고 혼동을 일으킬 수 있으므로 반복을 숨기고 싶습니다. 볼 최종 사용자, 그리고 자동으로 10 분 동안 알림을 보내지 않습니다. -> 해당 항목 중 일부 또는 전부를 숨길 수 있습니까? 3. 사용자에게 표시하지 않을 수도 있습니까? 나는 사용자가 어떤 캘린더를 사용할 지 고르는 것을 좋아하지만 대부분의 사람들이 전화를 다른 계정에 연결하고 전화 캘린더를 주요 관심사로 사용하므로 기본 설정을 사용하는 것이 좋습니다. 10 분 미리 알림을 사라지게 할 수 있다면 사용자에게 표시하지 않고 내가 말한대로 캘린더를 채우도록 할 수 있습니다.

도움을 줄 수있는 사람에게 감사드립니다. 나는 인 텐트, 캘린더 및 Android 개발자에게 생각할 수있는 모든 것을 읽었으며 이러한 답변을 찾을 수없는 벽을 쳤습니다. 어느 날 putExtra의 모든 유효한 목록이 있습니까? Android Developers 페이지는 모든 메소드 등을 나열하는 데 유용했지만 몇 가지 예제를 찾는 것 외에도 putExtra 내부에 유효한 인수로 무엇을 넣을 수 있는지 알지 못합니다.

답변

6

캘린더에 일정을 추가하려는 의도를 보내면 캘린더 활동이 시작됩니다. 의도는 단순히 시스템에 메시지입니다. 의도를 처리 할 수있는 활동은 자유롭게 말할 수 있습니다. 둘 이상의 활동의 의도 필터가 의도와 일치하면 사용자는 사용할 애플리케이션을 선택할 수있는 "명확성"화면을 볼 수 있습니다. 대부분의 Intents의 경우 표시되는 앱을 결정하는 MIME 유형입니다. 원하는 경우 이벤트 처리를위한 자체 활동을 작성할 수 있습니다. 액티비티의 의도 필터는 캘린더와 일치해야하며 캘린더에 무언가를 추가하려는 모든 의도를 처리하기 위해 스스로 서명하고 있기 때문에이 작업을 권장하지 않습니다!

일정 공급자 (실제로 공급자에 액세스하는 일정 응용 프로그램)에 일정을 보내거나 일정 공급자와 함께 ContentResolver API를 사용하여 직접 데이터를 삽입 할 수 있습니다.

캘린더 활동을 사용하는 대신 후자의 과정을 고려하고 나만의 UI를 제공 할 수 있지만 반복 일정을 추가하는 것은주의해야합니다. 까다로운 일이기 때문에 반복 일정을 추가하는 것이 좋습니다. 일반적으로 개발자는 사용자가 일정을 추가 할 수 있도록 일정 활동을 사용해야합니다.

의도를 사용하여 캘린더 "이벤트 삽입"활동을 시작하면 해당 UI를 제어 할 수 없습니다. 편의상, 캘린더 활동은 사용자가 보내는 추가 기능으로 UI를 채 웁니다. 엑스트라를 보내지 않으면 활동이 필드를 기본값으로 채우거나 비워 두십시오. 나는 그것이 확실한 것은 아니지만 이것이 표준 관행입니다.

개발자는 앱을 개발할 때 개발자 가이드을 종종 간과합니다. Calendar Provider를 자세히 설명하는 http://developer.android.com/guide/topics/providers/calendar-provider.html#intents을 살펴보십시오. 이 페이지는 사용 가능한 모든 추가 항목을 나열하고, 이벤트를 삽입하기 위해 ContentResolver() 프로세스를 사용하는 방법을 알려주고, 인 텐트 사용에 대해 자세히 설명합니다.

현재 응용 프로그램이 처리하는 인 텐트의 구조를 노출하는 표준 방법은 없다고 생각하지만 장치에 표시되는 내장형 또는 번들 형 응용 프로그램의 경우에는 항상 자세한 내용은 여기에 질문하십시오. 일부 앱은 플랫폼과 함께 번들로 제공되지만 다른 앱 (Google지도 등)은 별개임을 기억하십시오. 그들은 공개 의도/API를 가질 수 있지만 특정 사용자의 장치에는 사용할 수 없다는 점을 알아야합니다.

+0

설명해 주셔서 감사합니다. 지금은 훨씬 더 의미가 있습니다. 캘린더에 글을 쓰는 방법을 알아 내려고하면서 의도를 읽었 기 때문에 캘린더 의도에 대해 터널 비전을 가졌으며 의도가 무엇인지 생각하지 않았습니다. 이것은 정말로 캘린더 이벤트가 정확히 나타나는 이유와 내가 다음에 살펴 봐야 할 ContentResolver 및 캘린더 공급자를 시도하는 것 이외에는 아무 것도 변경할 수 없다는 것을 설명합니다. 감사. –

+0

공정하게 말하면 Google의 설명서가 항상 * 쉽게 * 찾을 수있는 것은 아닙니다. 달력 제공 업체의 의도에 대한 링크에 감사드립니다. 저는 꽤 오랫동안 검색해 왔습니다. –