android कैलेंडर से घटनाएं प्राप्त करना




calendar google-calendar (4)

इस कोड का उपयोग कैलेंडर कार्यक्रमों को एक दिन के लिए प्राप्त करें।

public static void readCalendarEvent(Context context) throws ParseException {

        ContentResolver contentResolver = context.getContentResolver();
        Calendar calendar = Calendar.getInstance();
        String dtstart = "dtstart";
        String dtend = "dtend";


        SimpleDateFormat    displayFormatter = new SimpleDateFormat("MMMM dd, yyyy (EEEE)");

         stime=displayFormatter.format(calendar.getTime());     

        SimpleDateFormat startFormatter = new SimpleDateFormat("MM/dd/yy");
        String dateString = startFormatter.format(calendar.getTime());

        long after = calendar.getTimeInMillis();
        SimpleDateFormat formatterr = new SimpleDateFormat("hh:mm:ss MM/dd/yy");
        Calendar endOfDay = Calendar.getInstance();
        Date dateCCC = formatterr.parse("23:59:59 " + dateString);
        endOfDay.setTime(dateCCC);






    cursor = contentResolver.query(Uri.parse("content://com.android.calendar/events"), (new String[] { "calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation" }), "(" + dtstart + ">" + after + " and " + dtend + "<" + endOfDay.getTimeInMillis() + ")", null, "dtstart ASC");


        /*String[] COLS={"calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation"};

        cursor = contentResolver.query(


                CalendarContract.Events.CONTENT_URI, COLS,null, null, null);*/

        gCalendar = new ArrayList<GoogleCalendar>();
        try {


            if (cursor.getCount() > 0) {


                while (cursor.moveToNext()) {
                    GoogleCalendar googleCalendar = new GoogleCalendar();
                    gCalendar.add(googleCalendar);
                    int calendar_id = cursor.getInt(0);
                    googleCalendar.setCalendar_id(calendar_id);
                    String title = cursor.getString(1);
                    googleCalendar.setTitle(title);
                    String description = cursor.getString(2);
                    googleCalendar.setDescription(description);
                    String dtstart1 = cursor.getString(3);
                     dt=convertDate(dtstart1,"hh:mm:ss");

                    googleCalendar.setDtstart(dt);                  

                String dtend1 = cursor.getString(4);
                    googleCalendar.setDtend(dtend1);


                    String eventTimeZone=cursor.getString(5);
                    googleCalendar.setEventTimeZone(eventTimeZone);
                    String eventlocation = cursor.getString(6);

                    googleCalendar.setEventlocation(eventlocation);



                }
            }
        } catch (AssertionError ex) {
            ex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

https://code.i-harness.com

मेरी समस्या यह है कि, मुझे एक डेमो एप्लिकेशन बनाना है जिसमें मैं Google कैलेंडर की घटनाओं को पढ़ना चाहता हूं, जिसके लिए मैंने ईवेंट के शीर्षक, घटनाओं का समय और पूरे कार्यक्रमों के विवरण जैसे मैन्युअल रूप से ईवेंट डाले हैं। अब मुझे केवल उन घटनाओं को कैलेंडर की आवश्यकता है। इसके लिए मैंने जीकोड (गूगल कोड) एपीआई का उपयोग करने की कोशिश की है जो कैलेंडर एपीआई क्लास प्रदान करता है। लेकिन फिर भी मैं उन घटनाओं को पढ़ने में सक्षम नहीं हूं ..


ऊपर दिया गया कोड बहुत भयानक है (और यह आईसीएस में काम नहीं कर रहा है - निश्चित रूप से कॉलम नाम अलग हैं)

यहां पृष्ठ: http://developer.android.com/guide/topics/providers/calendar-provider.html

एक बेहतर बेहतर सिंहावलोकन प्रदान करता है। कैलेंडरों को पुनर्प्राप्त करने के लिए एक (बहुत) सरल कोड:

public class CalendarContentResolver {
    public static final String[] FIELDS = { 
        CalendarContract.Calendars.NAME,
        CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
        CalendarContract.Calendars.CALENDAR_COLOR,
        CalendarContract.Calendars.VISIBLE 
    };

    public static final Uri CALENDAR_URI = Uri.parse("content://com.android.calendar/calendars");

    ContentResolver contentResolver;
    Set<String> calendars = new HashSet<String>();

    public  CalendarContentResolver(Context ctx) {
        contentResolver = ctx.getContentResolver();
    }

    public Set<String> getCalendars() {
        // Fetch a list of all calendars sync'd with the device and their display names
        Cursor cursor = contentResolver.query(CALENDAR_URI, FIELDS, null, null, null);

        try {
            if (cursor.getCount() > 0) {
                while (cursor.moveToNext()) {
                    String name = cursor.getString(0);
                    String displayName = cursor.getString(1);
                    // This is actually a better pattern:
                    String color = cursor.getString(cursor.getColumnIndex(CalendarContract.Calendars.CALENDAR_COLOR));
                    Boolean selected = !cursor.getString(3).equals("0");
                    calendars.add(displayName);  
                }
            }
        } catch (AssertionError ex) { /*TODO: log exception and bail*/ }

        return calendars;
    }
}

उम्मीद है की यह मदद करेगा!


मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मुझे आकाश तकर द्वारा दिए गए उत्तर में मिले समाधान को अनुकूलित करने के लिए प्रेरणा मिली, अगर किसी को निकट भविष्य में समाधान की आवश्यकता हो।

वाद विषय

विशेष रूप से, मुझे मूल कोड में कुछ समस्याएं मिलीं:

  1. कैलेंडर घटनाओं को पुनः प्राप्त करने के लिए लूप अपरिपक्व रूप से टूट गया
    • इस प्रकार, पहले कैलेंडर से केवल घटनाओं को पुनर्प्राप्त किया गया था
  2. प्रत्येक कैलेंडर में पहली घटना EventCursor.moveToFirst () का उपयोग कर छोड़ दी गई थी; जो उसके बाद लूप में सीधे अगले कार्यक्रम में सीधे चला जाता है
  3. कैलेंडरों की आईडी घटना कर्सर में सही ढंग से सेट नहीं की गई थी
    • "Calendars._id =" + 1, "Calendars._id =" + id होना चाहिए,
  4. दूसरों के लिए अपनी समय सीमा निर्दिष्ट करना मुश्किल होगा
  5. वर्तमान समाधान वस्तु उन्मुख नहीं है जो कई फायदे रखेगा
  6. पठनीयता और दस्तावेज़ीकरण सबसे अच्छा नहीं है

समाधान

मैंने इस प्रकार एक गिथब लाइब्रेरी बनाई है जो एक निश्चित समय सीमा में ईवेंट ऑब्जेक्ट्स की एक सूची देता है जो यहां पाया जा सकता है:

https://github.com/david-laundav/CalendarService

स्रोत फ़ाइलों को "कैलेंडर सेवा / src / dk / calendarService" के अंतर्गत पाया जा सकता है।

बक्सों का इस्तेमाल करें

समाधान में अलग-अलग उद्देश्यों के लिए दो अलग-अलग विधियां होती हैं।

पहला उपयोग केस:

CalendarService.readCalendar(class.this)
// where class.this is either your class or the context

यह विधि +/- 1 दिन के लिए ईवेंट की एक सूची वापस कर देगी

दूसरा उपयोग केस:

आप अपनी खुद की समय सीमा भी निर्दिष्ट कर सकते हैं:

CalendarService.readCalendar(class.this, int days, int hours)

एक उदाहरण हो सकता है:

CalendarService.readCalendar(class.this, 2, 5)

ऐसा करने में +/- 2 दिनों और +/- 5 घंटे से ईवेंट की एक सूची वापस आ जाएगी।

सेवा का परीक्षण किया गया है, लेकिन कृपया मुझे बताएं कि क्या आपको कोई समस्या है।


यह पोस्ट थोड़ा पुराना है, लेकिन एंड्रॉइड में Calendar सामग्री प्रदाता से संबंधित डेटा प्राप्त करने के लिए यहां एक और आसान समाधान है:

इस lib का प्रयोग करें: https://github.com/EverythingMe/easy-content-providers

और अब, सभी कैलेंडर प्राप्त करें:

CalendarProvider calendarProvider = new CalendarProvider(context);
List<Calendar> calendars = calendarProvider.getCalendars().getList();

प्रत्येक कैलेंडर में सभी फ़ील्ड होते हैं, इसलिए आपको अपनी आवश्यक जानकारी प्राप्त हो सकती है: आईडी, नाम, कैलेंडर रंग, मालिक खाता, खाता नाम, कैलेंडर एक्सेस विफलता, ...

या, विशिष्ट कैलेंडर की सभी घटनाएं प्राप्त करें:

List<Event> calendars = calendarProvider.getEvents(calendar.id).getList();

और अनुस्मारक, उपस्थिति, उदाहरण प्राप्त करने का विकल्प भी है।

यह सूचियों या कर्सर के साथ काम करता है और यह देखने के लिए एक नमूना ऐप है कि यह कैसा दिखता है और काम करता है। वास्तव में, सभी एंड्रॉइड सामग्री प्रदाताओं के लिए समर्थन है जैसे: संपर्क, एसएमएस, कॉल, ... सभी विकल्पों के साथ पूर्ण दस्तावेज़: https://github.com/EverythingMe/easy-content-providers/wiki/Android-providers

उम्मीद है कि यह मदद की :)





google-calendar