이 튜토리얼에서는 Kotlin을 사용해 안드로이드 앱에서 기본 캘린더 앱을 호출하여 캘린더 이벤트를 추가하는 방법을 단계별로 살펴봅니다. 별도의 권한 요청 없이 인텐트(Intent)만으로 캘린더 일정 등록 화면을 띄울 수 있어 구현이 매우 간단합니다.
1단계 — 새 프로젝트 생성
Android Studio에서 File → New Project를 선택한 후, 새 프로젝트 생성에 필요한 모든 정보를 입력하여 프로젝트를 만듭니다.
2단계 — 레이아웃 작성 (res/layout/activity_main.xml)
메인 레이아웃 파일에 아래 코드를 추가합니다. 중앙에 텍스트뷰와 함께 '캘린더 이벤트 추가' 버튼 하나를 배치하는 간단한 구성입니다.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="50dp" android:text="Tutorials Point" android:textAlignment="center" android:textColor="@android:color/holo_green_dark" android:textSize="32sp" android:textStyle="bold" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:layout_centerInParent="true" android:onClick="addCalendarEvent" android:text="캘린더 이벤트 추가" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="안드로이드 캘린더 이벤트" android:textColor="@android:color/background_dark" android:textSize="18sp" android:textStyle="bold" /> </RelativeLayout>
3단계 — 메인 액티비티 작성 (src/MainActivity.kt)
Intent.ACTION_EDIT과 MIME 타입 vnd.android.cursor.item/event를 사용하면, 사용자의 기본 캘린더 앱이 실행되면서 미리 지정된 값들이 채워진 일정 편집 화면이 열립니다.
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import java.util.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
}
fun addCalendarEvent(view: View) {
val calendarEvent: Calendar = Calendar.getInstance()
val intent = Intent(Intent.ACTION_EDIT)
intent.type = "vnd.android.cursor.item/event"
intent.putExtra("beginTime", calendarEvent.timeInMillis)
intent.putExtra("allDay", true)
intent.putExtra("rule", "FREQ=YEARLY")
intent.putExtra("endTime", calendarEvent.timeInMillis + 60 * 60 * 1000)
intent.putExtra("title", "Calendar Event")
startActivity(intent)
}
}
인텐트에 담기는 주요 값 설명
- beginTime: 이벤트 시작 시간 (밀리초 단위 타임스탬프). 예제에서는 현재 시각을 사용합니다.
- allDay: true로 설정하면 '종일 이벤트'로 등록됩니다.
- rule: 반복 규칙(RRULE).
FREQ=YEARLY는 매년 같은 날짜에 반복되는 일정을 의미합니다. 필요에 따라FREQ=WEEKLY,FREQ=DAILY등으로 변경할 수 있습니다. - endTime: 이벤트 종료 시간. 예제에서는 시작 시간보다 1시간(60 × 60 × 1000밀리초) 뒤로 설정했습니다.
- title: 캘린더에 표시될 일정 제목입니다.
4단계 — 매니페스트 확인 (AndroidManifest.xml)
매니페스트 파일에는 별도의 권한 선언 없이 아래와 같이 기본 설정만 있으면 됩니다. 캘린더 데이터를 직접 읽거나 쓰는 것이 아니라 캘린더 앱에 작업을 위임하기 때문에 READ_CALENDAR, WRITE_CALENDAR 권한이 필요하지 않습니다.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.q11"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run(실행) 아이콘
을 클릭하세요. 목록에서 자신의 모바일 기기를 선택하고 앱을 실행하면, 기본 화면이 다음과 같이 표시됩니다.

'캘린더 이벤트 추가' 버튼을 누르면 기기의 기본 캘린더 앱이 열리며, 시작·종료 시간, 반복 규칙(매년), 제목이 미리 입력된 일정 등록 화면을 확인할 수 있습니다. 사용자가 저장 버튼을 누르면 해당 일정이 캘린더에 그대로 등록됩니다.