2013-04-26 4 views
8

में डिफ़ॉल्ट कैलेंडर आईडी पुनर्प्राप्त करें मेरे पास कैलेंडर में ईवेंट जोड़ने के लिए निम्न कोड है।एंड्रॉइड

समस्या यह है कि मुझे नहीं पता कि डिफ़ॉल्ट कैलेंडर आईडी पुनर्प्राप्त कैसे करें।

long calID = 3; 
long startMillis = 0; 
long endMillis = 0;  
Calendar beginTime = Calendar.getInstance(); 
beginTime.set(2013, 3, 23, 7, 30); 
startMillis = beginTime.getTimeInMillis(); 
Calendar endTime = Calendar.getInstance(); 
endTime.set(2013, 3, 24, 8, 45); 
endMillis = endTime.getTimeInMillis(); 

ContentResolver cr = getContentResolver(); 
ContentValues values = new ContentValues(); 
values.put(Events.DTSTART, startMillis); 
values.put(Events.DTEND, endMillis); 
values.put(Events.TITLE, "My Test"); 
values.put(Events.DESCRIPTION, "My Calendar Test"); 
values.put(Events.CALENDAR_ID, calID); 
values.put(Events.EVENT_TIMEZONE, "Israel/tel-aviv"); 
Uri uri = cr.insert(Events.CONTENT_URI, values); 

लाइन: long calID = 3; कैलेंडर आईडी है

यह एंड्रॉयड से डिफ़ॉल्ट कैलेंडर आईडी मिलता है, या मैं कैलेंडर की एक सूची दिखाने की जरूरत है और उपयोगकर्ता है एक चुनना करने के लिए संभव है?

यदि संभव नहीं है, तो कैलेंडर खातों की सूची कैसे दिखाएं?

उत्तर

11

कैलेंडर की सूची प्राप्त करने के लिए, तो आप इस तरह ContentResolver क्वेरी करने के लिए की जरूरत है:

public MyCalendar [] getCalendar(Context c) { 

    String projection[] = {"_id", "calendar_displayName"}; 
    Uri calendars; 
    calendars = Uri.parse("content://com.android.calendar/calendars"); 

    ContentResolver contentResolver = c.getContentResolver(); 
    Cursor managedCursor = contentResolver.query(calendars, projection, null, null, null); 

    if (managedCursor.moveToFirst()){ 
     m_calendars = new MyCalendar[managedCursor.getCount()]; 
     String calName; 
     String calID; 
     int cont= 0; 
     int nameCol = managedCursor.getColumnIndex(projection[1]); 
     int idCol = managedCursor.getColumnIndex(projection[0]); 
     do { 
      calName = managedCursor.getString(nameCol); 
      calID = managedCursor.getString(idCol); 
      m_calendars[cont] = new MyCalendar(calName, calID); 
      cont++; 
     } while(managedCursor.moveToNext()); 
     managedCursor.close(); 
    } 
    return m_calendars; 

} 
5

CalendarContract.CalendarColumns में एक IS_PRIMARY स्तंभ नहीं है। आप चयन के साथ क्वेरी:

CalendarContract.CalendarColumns.IS_PRIMARY + "=1" 

बहरहाल, यह है एसडीके 17 के बाद से

2

कुछ नवीनतम संस्करण मुद्दा है, अलग अलग दिखाई कैलेंडर सूची इतना नीचे है प्राथमिक कैलेंडर का चयन करने के कोड है और पुराने उपकरणों में इस क्वेरी 0 रिकॉर्ड लौटाएं, तो दूसरा रिकॉर्ड अगर दूसरा रिकॉर्ड 0 रिकॉर्ड करता है।

Cursor calCursor = mContext.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1 AND " + CalendarContract.Calendars.IS_PRIMARY + "=1", null, CalendarContract.Calendars._ID + " ASC"); 
if(calCursor.getCount() <= 0){ 
    calCursor = mContext.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1", null, CalendarContract.Calendars._ID + " ASC"); 
}