2011-12-31 18 views
7

में कई ईवेंट डालें मुझे अपनी समस्या का हल ढूंढने में परेशानी हो रही है। मैं अपने एंड्रॉइड कैलेंडर में कई ईवेंट जोड़ने की कोशिश कर रहा हूं लेकिन मुझे नहीं पता कि कैसे। मैंने यह कोड पाया:एंड्रॉइड कैलेंडर

 Calendar cal = Calendar.getInstance();    
      Intent intent = new Intent(Intent.ACTION_EDIT); 
      intent.setType("vnd.android.cursor.item/event"); 
      intent.putExtra("beginTime", cal.getTimeInMillis()); 
      intent.putExtra("allDay", true); 
      intent.putExtra("rrule", "FREQ=YEARLY"); 
      intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000); 
      intent.putExtra("title", "A Test Event from android app"+String.valueOf(i)); 
      startActivity(intent); 

लेकिन यह सब मुझे मेरे कैलेंडर में भेजना है और मुझे अपना ईवेंट संपादित करने और मैन्युअल रूप से सम्मिलित करने देता है। मैं अपने कैलेंडर ऐप पर जाकर, ईवेंट को स्वचालित रूप से सम्मिलित करना चाहता हूं। इसके अलावा, मैं इस कोड का उपयोग कर केवल एक घटना जोड़ सकता हूं। यह वही नहीं है जो मैं चाहता था। मेरे पास 2 स्ट्रिंग सरणी हैं, जिनमें एक तिथि है, और जिसमें ईवेंट का नाम है। क्या किसी को पता है कि ऐसा करने का कोई तरीका है या नहीं? मैं थोड़ी देर के लिए समाधान खोज रहा हूं और उसे नहीं मिला। अगर कोई मेरी मदद करता है तो मैं आभारी रहूंगा। धन्यवाद!

मैंने समस्या हल कर दी है! आपका बहुत बहुत धन्यवाद! लेकिन अब मेरे पास एक और मुद्दा है जिसे मैं हल नहीं कर सकता। मैं इस कोड है:

 ContentValues cv = new ContentValues(); 
     cv.put("calendar_id", calIds[0]); 
     cv.put("title", title); 
     //cv.put("dtstart", dtstart); 
     //cv.put("dtend", dtend); 
     cv.put("rrule", "FREQ=MONTHLY"); 
     cv.put("description", comment); 
     Calendar start = Calendar.getInstance(); 
     start.set(2012, 0, 2, 8, 0, 0); 

     Calendar end = Calendar.getInstance(); 
     end.set(2012, 0, 2, 9, 0, 0); 

     long startTime = start.getTimeInMillis();  
     long endTime = end.getTimeInMillis(); 

     cv.put("dtstart", startTime); 
     cv.put("dtend", endTime); 
     //Insertion on the events of the calendar 
     cr.insert(Uri.parse("content://com.android.calendar/events"), cv); 

यह मेरा घटना सम्मिलित करता है, लेकिन यह यह आवर्ती नहीं करता है। मेरा मतलब है कि मेरा कार्यक्रम 2jan2012 पर दिखाई देता है लेकिन 2jan2013 पर और न तो 2014 में और न ही करता है। इसलिए मैंने फोन पर अपना कैलेंडर खोला और मेरी घटना को संपादित करने की कोशिश की और मैंने देखा कि मुझे इसके अवसर का चयन करना चाहिए, वहां 2 जनवरी 2012 को 2 जनवरी को नहीं दिखाया गया है, क्योंकि इसे मेरे कार्यक्रम को कस्टमाइज़ करना चाहिए फ़ोन। दूसरी तरफ, अगर मैं अपने फोन से मैन्युअल रूप से एक ईवेंट जोड़ने की कोशिश करता हूं तो यह ठीक काम करता है (मेरा मतलब है कि मैं सालाना होने वाली एक घटना जोड़ सकता हूं)।

उत्तर

5

एंड्रॉयड एसडीके कैलेंडर में हेरफेर करने के लिए किसी भी इंटरफेस का खुलासा नहीं करता है, लेकिन आपको लगता है कि एंड्रॉयड के स्रोत कोड से पा सकते हैं। एंड्रॉइड कैलेंडर को एक आंतरिक स्क्लाइट डेटाबेस में संग्रहीत करता है, हालांकि यह सीधे पहुंच से सुरक्षित है लेकिन आप अभी भी ContentResolver के माध्यम से कैलेंडर डेटा जोड़/हटा/अपडेट/क्वेरी कर सकते हैं। ,

public String addEvent(String calendarId, String title, long startTime, 
     long endTime, int allDay) { 
    ContentValues event = new ContentValues(); 
    event.put("calendar_id", calendarId); // "" for insert 
    event.put("title", title); 
    event.put("description", ""); 
    event.put("eventLocation", ""); 
    event.put("allDay", allDay); 
    event.put("eventStatus", 1); 
    event.put("transparency", 0); 
    event.put("dtstart", startTime); 
    event.put("dtend", endTime); 

    ContentResolver contentResolver = this.context.getContentResolver(); 
    Uri eventsUri = Uri.parse("content://com.android.calendar/calendars"); 
    Uri url = contentResolver.insert(eventsUri, event); 
    String ret = url.toString(); 
    return ret; 
} 

जब आप एक ईवेंट सफलतापूर्वक डालें, एक स्ट्रिंग uri प्रतिनिधित्व की स्थिति ContentResolver.insert द्वारा दिया जाता है आप क्वेरी, अद्यतन या बाद में इसे हटा सकते हैं: एक घटना डालने के लिए कोड का एक टुकड़ा इस तरह हो सकता है । एसडीके 8 से पहले एसडीके में, कैलेंडर की सामग्री यूरी "सामग्री: // कैलेंडर/कैलेंडर्स" है जो एसडीक्स 8 और उसके बाद से अलग है।
इस बीच, उन कस्टम रोम से सावधान रहें। चूंकि कैलेंडर एपीआई एसडीके दस्तावेज़ों में नोट नहीं किया गया है, इसलिए कैलेंडर प्रदाता को कुछ विक्रेताओं और ऑपरेटरों द्वारा संशोधित या हटाया जा सकता है, इसलिए आपको अपने डिवाइस को कई उपकरणों के विरुद्ध परीक्षण करना पड़ सकता है।
शुभकामनाएं!

+0

असल में वे अंत में आईसीएस के एक अधिकारी कैलेंडर API कहा: http://developer.android.com/reference/android/provider/CalendarContract.html –

+0

धन्यवाद @mbaird, यह वास्तव में एक अच्छी खबर है! मैं थोड़ी देर के लिए एंड्रॉइड पर काम नहीं कर रहा हूं और मुझे नवीनतम संस्करण के साथ मिलना चाहिए। – hago

+0

मैंने समस्या हल कर दी है लेकिन अब मुझे एक और समस्या है। यदि आप एक और बार मेरी मदद कर सकते हैं तो मैं बहुत आभारी हूं ... मैंने दूसरे मुद्दे के बारे में अपना प्रश्न संपादित किया है। – Lara

0
public Uri createEvent(int calId, ICalEvent event) { 
     ContentValues eventValues = new ContentValues(); 

     eventValues.put("calendar_id", calId); 
     eventValues.put("title", event.getSummary()); 
     eventValues.put("description", event.getDescription()); 
     eventValues.put("eventLocation", event.getLocation()); 

// eventValues.put("UID", "ADE52556e6976657273697465323031302f323031312d323637392d302d3131"); 
// originalEvent 
     eventValues.put("originalEvent", event.getUid() + ";" + event.getLastModif().getTime()); 

     long startTime = event.getStart().getTime();//System.currentTimeMillis() + 1000 * 60 * 60; 
     long endTime = event.getEnd().getTime();//System.currentTimeMillis() + 1000 * 60 * 60 * 2; 

     eventValues.put("dtstart", (event.isWholeDayEvent() ? endTime : startTime)); 
     eventValues.put("dtend", endTime); 

     eventValues.put("allDay", (event.isWholeDayEvent() ? 1 : 0)); // 0 for false, 1 for true 
     eventValues.put("eventStatus", 1); 
     eventValues.put("visibility", 0); 
     eventValues.put("transparency", 0); 
     eventValues.put("hasAlarm", 0); // 0 for false, 1 for true 

     System.out.println("USING SYNC ACCOUNT " + sync_account); 

     eventValues.put("_sync_account_type", sync_account); 

     Uri eventsUri = Uri.parse(getCalendarUriBase()+"events"); 

     Uri insertedUri = activity.getContentResolver().insert(eventsUri, eventValues); 
     return insertedUri; 
    } 
संबंधित मुद्दे