इंटेंट के माध्यम से सिस्टम कैलेंडर ऐप में इवेंट जोड़ना
एंड्रॉइड में कैलेंडर इवेंट जोड़ने का सबसे सरल तरीका Intent.ACTION_INSERT या Intent.ACTION_EDIT का उपयोग करके सिस्टम कैलेंडर ऐप को लॉन्च करना है। यह यूजर को इवेंट विवरण संपादित/पुष्टि करने देता है और किसी विशेष अनुमति की आवश्यकता नहीं होती।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में प्रोजेक्ट बनाएं।
चरण 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="16dp"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="कैलेंडर इवेंट जोड़ने का डेमो"
android:textSize="18sp"
android:textStyle="bold" />
<Button
android:id="@+id/btnAddEvent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/textView"
android:layout_marginTop="24dp"
android:onClick="addCalendarEvent"
android:text="कैलेंडर इवेंट जोड़ें" />
</RelativeLayout>
चरण 3: MainActivity में इवेंट जोड़ने का लॉजिक
package com.app.sample;
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) {
// वर्तमान समय से शुरू होने वाला इवेंट
Calendar beginTime = Calendar.getInstance();
Calendar endTime = Calendar.getInstance();
endTime.add(Calendar.HOUR, 1); // 1 घंटे बाद समाप्त
// इंटेंट बनाएं
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, "कॉन्फ्रेंस रूम A / Google Meet")
.putExtra(CalendarContract.Events.DTSTART, beginTime.getTimeInMillis())
.putExtra(CalendarContract.Events.DTEND, endTime.getTimeInMillis())
.putExtra(CalendarContract.Events.ALL_DAY, false)
.putExtra(CalendarContract.Events.HAS_ALARM, true)
.putExtra(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID())
.putExtra(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY)
// रिकरेंस नियम (वैकल्पिक) - साप्ताहिक
.putExtra(CalendarContract.Events.RRULE, "FREQ=WEEKLY;BYDAY=MO;COUNT=10");
// कैलेंडर ऐप लॉन्च करें
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
// फॉलबैक: कोई कैलेंडर ऐप नहीं मिला
android.widget.Toast.makeText(this, "कोई कैलेंडर ऐप नहीं मिला", android.widget.Toast.LENGTH_SHORT).show();
}
}
}
मुख्य CalendarContract एक्स्ट्रा
| एक्स्ट्रा कुंजी | विवरण | उदाहरण |
|---|---|---|
Events.TITLE | इवेंट शीर्षक | "मीटिंग" |
Events.DESCRIPTION | विवरण | "प्रोजेक्ट चर्चा" |
Events.DTSTART | शुरुआत समय (मिलीसेकंड) | calendar.getTimeInMillis() |
Events.DTEND | समाप्ति समय | calendar.getTimeInMillis() |
Events.ALL_DAY | पूरे दिन का इवेंट | true/false |
Events.EVENT_LOCATION | स्थान | "ऑफिस/ऑनलाइन" |
Events.RRULE | रिकरेंस नियम (RFC 5545) | "FREQ=WEEKLY;COUNT=10" |
Events.HAS_ALARM | रिमाइंडर सक्षम करें | true |
Events.AVAILABILITY | व्यस्त/मुक्त स्थिति | AVAILABILITY_BUSY |
एडवांस्ड: रिमाइंडर (अलार्म) जोड़ना
इवेंट डालने के बाद प्रोग्रामेटिकली रिमाइंडर जोड़ें:
// पहले इवेंट इन्सर्ट करें (ContentResolver के माध्यम से) ContentValues values = new ContentValues(); values.put(CalendarContract.Events.TITLE, "मीटिंग"); values.put(CalendarContract.Events.DTSTART, beginTime.getTimeInMillis()); values.put(CalendarContract.Events.DTEND, endTime.getTimeInMillis()); // ... अन्य फील्ड्स Uri eventUri = getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values); long eventId = Long.parseLong(eventUri.getLastPathSegment()); // फिर रिमाइंडर जोड़ें (10 मिनट पहले) ContentValues reminderValues = new ContentValues(); reminderValues.put(CalendarContract.Reminders.EVENT_ID, eventId); reminderValues.put(CalendarContract.Reminders.MINUTES, 10); reminderValues.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); getContentResolver().insert(CalendarContract.Reminders.CONTENT_URI, reminderValues);
आवश्यक अनुमतियां (डायरेक्ट इन्सर्ट के लिए)
AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" />
महत्वपूर्ण: इंटेंट विधि (ACTION_INSERT) के लिए कोई अनुमति आवश्यक नहीं - यूजर स्वयं कैलेंडर ऐप में इवेंट पुष्टि करता है। डायरेक्ट ContentResolver इन्सर्ट के लिए READ/WRITE_CALENDAR अनुमतियाँ चाहिए।
चरण 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.app.sample">
<!-- इंटेंट विधि के लिए कोई अनुमति नहीं चाहिए -->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
रिकरेंस नियम (RRULE) उदाहरण
FREQ=DAILY;COUNT=5- 5 दिन दैनिकFREQ=WEEKLY;BYDAY=MO,WE,FR- सोम, बुध, शुक्र साप्ताहिकFREQ=MONTHLY;BYMONTHDAY=15- हर महीने की 15 तारीखFREQ=YEARLY- वार्षिक (जन्मदिन, वर्षगांठ)
नोट: यूजर के डिवाइस पर एक से अधिक कैलेंडर ऐप्स हो सकते हैं। इंटेंट एक चॉइस डायलॉग दिखाएगा। यदि आप डिफ़ॉल्ट कैलेंडर जानते हैं, तो intent.putExtra("calendar_id", selectedCalendarId) का उपयोग कर सकते हैं।