Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách thêm sự kiện vào Calendar (Lịch) trong Android

Giới thiệu

Bài viết này hướng dẫn cách mở ứng dụng Calendar mặc định của Android để thêm sự kiện mới thông qua Intent ACTION_EDIT.

Các bước thực hiện

Bước 1: Tạo dự án mới

Khởi tạo project Android Studio mới.

Bước 2: Layout (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">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="addCalendarEvent"
        android:text="Thêm sự kiện Calendar" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Thêm sự kiện vào Lịch Android"
        android:textSize="18sp"
        android:textStyle="bold" />

</RelativeLayout>

Bước 3: Code Java (src/MainActivity.java)

package app.com.sample;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void addCalendarEvent(View view) {
        Calendar calendar = Calendar.getInstance();

        Intent intent = new Intent(Intent.ACTION_EDIT);
        intent.setType("vnd.android.cursor.item/event");

        // Thời gian bắt đầu: ngay bây giờ
        intent.putExtra("beginTime", calendar.getTimeInMillis());

        // Sự kiện cả ngày
        intent.putExtra("allDay", true);

        // Lặp lại hàng năm
        intent.putExtra("rrule", "FREQ=YEARLY");

        // Thời gian kết thúc: 1 giờ sau
        intent.putExtra("endTime", calendar.getTimeInMillis() + 60 * 60 * 1000);

        // Tiêu đề sự kiện
        intent.putExtra("title", "Sự kiện từ App Demo");

        // Mô tả (tùy chọn)
        intent.putExtra("description", "Được tạo tự động từ ứng dụng demo");

        // Kiểm tra có app Calendar nào xử lý intent không
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        } else {
            // Fallback: mở Calendar app chung
            Intent fallback = new Intent(Intent.ACTION_VIEW)
                .setData(android.provider.CalendarContract.CONTENT_URI);
            startActivity(fallback);
        }
    }
}

Các extra quan trọng cho Calendar Intent:

Extra KeyKiểu dữ liệuMô tả
titleStringTiêu đề sự kiện
descriptionStringMô tả chi tiết
eventLocationStringĐịa điểm
beginTimelong (millis)Thời gian bắt đầu
endTimelong (millis)Thời gian kết thúc
allDaybooleanSự kiện cả ngày
rruleStringQuy tắc lặp (RFC 5545), vd: "FREQ=WEEKLY"
eventTimezoneStringMúi giờ, vd: "Asia/Ho_Chi_Minh"

Bước 4: Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <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>

Chạy ứng dụng

Chạy app, nhấn nút "Thêm sự kiện Calendar". Sẽ mở app Calendar (Google Calendar hoặc Calendar mặc định) với form tạo sự kiện đã điền sẵn thông tin.

Cách thêm sự kiện vào Calendar (Lịch) trong Android Cách thêm sự kiện vào Calendar (Lịch) trong Android

Lưu ý

  • Cần có ứng dụng Calendar cài đặt trên thiết bị
  • Người dùng phải xác nhận lưu sự kiện
  • Không cần quyền WRITE_CALENDAR khi dùng Intent (chỉ cần khi ghi trực tiếp qua CalendarContract)

Cách ghi trực tiếp vào Calendar (cần permission)

// Cần permission: WRITE_CALENDAR
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.TITLE, "Title");
values.put(CalendarContract.Events.DTSTART, startTime);
values.put(CalendarContract.Events.DTEND, endTime);
values.put(CalendarContract.Events.CALENDAR_ID, 1);
values.put(CalendarContract.Events.EVENT_TIMEZONE, "UTC");
getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values);