অ্যান্ড্রয়েডে Calendar Provider ব্যবহার করে ইভেন্ট যোগ করা
অ্যান্ড্রয়েডে ক্যালেন্ডার ইভেন্ট যোগ করার সবচেয়ে সহজ পদ্ধতি হলো `Intent.ACTION_EDIT` বা `Intent.ACTION_INSERT` ব্যবহার করে সিস্টেম ক্যালেন্ডার অ্যাপ খুলে দেওয়া। ব্যবহারকারী ইভেন্ট কনফার্ম করলে সেটি ক্যালেন্ডারে সেভ হয়। এই টিউটোরিয়ালে এই পদ্ধতিটি দেখানো হয়েছে।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে একটি নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট ফাইল (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="16dp"
tools:context=".MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="addCalendarEvent"
android:text="ক্যালেন্ডার ইভেন্ট যোগ করুন" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="অ্যান্ড্রয়েডে ক্যালেন্ডার ইভেন্ট যোগ করা"
android:textSize="18sp"
android:textStyle="bold" />
</RelativeLayout>
ধাপ ৩: MainActivity.java - ইভেন্ট যোগ করার লজিক
package com.example.calendarevent;
import android.content.Intent;
import android.os.Bundle;
import android.provider.CalendarContract;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Calendar;
import java.util.TimeZone;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void addCalendarEvent(View view) {
// ক্যালেন্ডার ইভেন্টের জন্য ইন্টেন্ট তৈরি করুন
Intent intent = new Intent(Intent.ACTION_INSERT)
.setData(CalendarContract.Events.CONTENT_URI)
.putExtra(CalendarContract.Events.TITLE, "মিটিং ক্লায়েন্টের সাথে")
.putExtra(CalendarContract.Events.DESCRIPTION, "প্রজেক্ট প্রগ্রেস নিয়ে আলোচনা")
.putExtra(CalendarContract.Events.EVENT_LOCATION, "ঢাকা অফিস, কক্ষ ৩০১")
.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, getStartTimeMillis())
.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, getEndTimeMillis())
.putExtra(CalendarContract.Events.ALL_DAY, false)
.putExtra(CalendarContract.Events.RRULE, "FREQ=WEEKLY;COUNT=4") // প্রতি সপ্তাহে ৪ বার
.putExtra(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY)
.putExtra(Intent.EXTRA_EMAIL, "client@example.com,team@example.com"); // আমন্ত্রিতরা
// ইন্টেন্ট হ্যান্ডল করার অ্যাপ আছে কিনা চেক করুন
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
// ক্যালেন্ডার অ্যাপ নেই - ফলব্যাক
android.widget.Toast.makeText(this, "কোনো ক্যালেন্ডার অ্যাপ পাওয়া যায়নি", android.widget.Toast.LENGTH_SHORT).show();
}
}
private long getStartTimeMillis() {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Dhaka"));
calendar.set(2024, Calendar.JANUARY, 15, 10, 0); // ১৫ জানুয়ারি, সকাল ১০টা
return calendar.getTimeInMillis();
}
private long getEndTimeMillis() {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Dhaka"));
calendar.set(2024, Calendar.JANUARY, 15, 11, 30); // ১৫ জানুয়ারি, সকাল ১০:৩০
return calendar.getTimeInMillis();
}
}
CalendarContract.Events-এর মূল ফিল্ডগুলো
| ফিল্ড (Extra Key) | বর্ণনা | উদাহরণ |
|---|---|---|
TITLE |
ইভেন্টের শিরোনাম | "টিম মিটিং" |
DESCRIPTION |
বিবরণ | "সপ্রিন্ট পরিকল্পনা" |
EVENT_LOCATION |
অবস্থান | "জুম কল / অফিস" |
EXTRA_EVENT_BEGIN_TIME |
শুরুর সময় (millis since epoch) | System.currentTimeMillis() |
EXTRA_EVENT_END_TIME |
শেষের সময় | beginTime + 3600000 (১ ঘণ্টা) |
ALL_DAY |
সারাদিনের ইভেন্ট কিনা | true / false |
RRULE |
রিকারেন্স রুল (iCal ফরম্যাট) | "FREQ=DAILY;COUNT=10" |
AVAILABILITY |
ব্যস্ত/ফ্রি স্ট্যাটাস | AVAILABILITY_BUSY / FREE |
EXTRA_EMAIL |
আমন্ত্রিতদের ইমেইল (কমা-সেপারেটেড) | "a@b.com, c@d.com" |
পরমিশন (ঐচ্ছিক - সরাসরি ইনসার্টের জন্য)
যদি ব্যবহারকারীকে ক্যালেন্ডার অ্যাপ দেখাতে না চেয়ে সরাসরি ইভেন্ট ইনসার্ট করতে চান, তবে পারমিশন লাগবে:
<uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.READ_CALENDAR" />
তারপর `ContentResolver.insert()` ব্যবহার করুন:
ContentValues values = new ContentValues(); values.put(CalendarContract.Events.TITLE, "নতুন ইভেন্ট"); values.put(CalendarContract.Events.DTSTART, startMillis); values.put(CalendarContract.Events.DTEND, endMillis); values.put(CalendarContract.Events.CALENDAR_ID, 1); // প্রাইমারি ক্যালেন্ডার values.put(CalendarContract.Events.EVENT_TIMEZONE, "Asia/Dhaka"); Uri uri = getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values);
ধাপ ৪: ম্যানিফেস্ট ফাইল
সাধারণ কনফিগারেশন। ইন্টেন্ট মেথডের জন্য কোনোพิশেষ পারমিশন দরকার নেই।
ফলাফল
বাটনে ক্লিক করলে সিস্টেম ক্যালেন্ডার অ্যাপ খুলবে পূর্ব-ভরা ফর্মের সাথে। ব্যবহারকারী "Save" চাপলে ইভেন্ট ক্যালেন্ডারে যোগ হবে।
সেরা অনুশীলন
- সময়ক্ষেত্র (Timezone) সবসময় স্পষ্ট করুন: `CalendarContract.Events.EVENT_TIMEZONE`
- RRULE সঠিক ফরম্যাটে দিন (RFC 5545 iCalendar standard)
- ইন্টেন্ট রিজল্ভ না হলে গ্রেসফুলি হ্যান্ডেল করুন
- রিমাইন্ডার যোগ করতে: `CalendarContract.Reminders` টেবিলে এন্ট্রি যোগ করুন