কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড অ্যাপে ক্যালেন্ডার ইভেন্ট যোগ করার পদ্ধতি

অ্যান্ড্রয়েডে 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` টেবিলে এন্ট্রি যোগ করুন
  1. অ্যান্ড্রয়েড অ্যাপে TextToSpeech তৈরি করার পদ্ধতি

  2. Facebook-এ Android অ্যাপ তৈরি করার পদ্ধতি

  3. Android PreferenceScreen-এ বাটন যোগ করার পদ্ধতি

  4. Android Studio-এ JAR ফাইল লাইব্রেরি হিসেবে যোগ করার পদ্ধতি