代码之家  ›  专栏  ›  技术社区  ›  Udi Oshi

读取并将事件插入日历

  •  0
  • Udi Oshi  · 技术社区  · 12 年前

    我使用以下代码将事件(以编程方式,而不是故意)插入到特定日历(带有ID)中

            ContentResolver cr = context.getContentResolver();
            ContentValues values = new ContentValues();
            values.put(CalendarContract.Events.DTSTART, startMillis);
            values.put(CalendarContract.Events.DTEND, endMillis);
            values.put(CalendarContract.Events.TITLE, cname);
            values.put(CalendarContract.Events.DESCRIPTION, note);
            values.put(CalendarContract.Events.CALENDAR_ID, calID);
            values.put(CalendarContract.Events.EVENT_TIMEZONE, tz.getDisplayName());
            if (recurrence != null)
                values.put(CalendarContract.Events.RRULE, "FREQ=" + recurrence + ";");
            Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
    

    插入效果很好,我正在保存事件id: uri.getLastPathSegment()

    但问题是如何阅读 特定事件 来自 特定日历 ?

    谢谢你的帮助

    2 回复  |  直到 12 年前
        1
  •  0
  •   Benoit    12 年前

    您可以使用contentResolver查询CalendarContract.Events,并在eventId上选择

    要获取日历ID,请执行以下操作:

    Uri calUri = CalendarContract.Calendars.CONTENT_URI.buildUpon()
                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, mAccountName)
                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, mAccountType)
                .build();
    
    getContentResolver().query(calUri, new String[]{CalendarContract.Calendars._ID}, null, null, null);
    
        2
  •  0
  •   Mehul Ranpara    12 年前

    您可以通过以下方式在日历中插入提醒和事件:

    Calendar cal = Calendar.getInstance();     
    Uri EVENTS_URI = Uri.parse(getCalendarUriBase(New_Quote_Activity.this) + "events");
    ContentResolver cr1 = getContentResolver();
    
    // event insert
    ContentValues values = new ContentValues();
    values.put("calendar_id", 1);
    values.put("title", "Text");
    values.put("dtstart", cal.getTimeInMillis() + 1*60*1000); // event starts at 11 minutes from now
    values.put("dtend", cal.getTimeInMillis()+5760*60*1000); // ends 60 minutes from now
    values.put("description", edt_Location.getText().toString());
    // values.put("visibility", 0);
    values.put("hasAlarm", 1);
    values.put("eventTimezone", Time.getCurrentTimezone());
    Uri event = cr1.insert(EVENTS_URI, values);
    
    // reminder insert
    Uri REMINDERS_URI = Uri.parse(getCalendarUriBase(New_Quote_Activity.this) + "reminders");
    values = new ContentValues();
    values.put( "event_id", Long.parseLong(event.getLastPathSegment()));
    values.put( "method", 1 );
    values.put( "minutes", 2880 );
    cr1.insert( REMINDERS_URI, values );
    

    对于读取事件,请使用以下代码:

    Cursor cursor = cr.query(Uri.parse("content://calendar/events"), new String[]{ "calendar_id", "title", "description", "dtstart", "dtend", "eventLocation" }, null, null, null);         
        //Cursor cursor = cr.query(Uri.parse("content://calendar/calendars"), new String[]{ "_id", "name" }, null, null, null);
        String add = null;
        cursor.moveToFirst();
        String[] CalNames = new String[cursor.getCount()];
        int[] CalIds = new int[cursor.getCount()];
        for (int i = 0; i < CalNames.length; i++) {
            CalIds[i] = cursor.getInt(0);
            CalNames[i] = "Event"+cursor.getInt(0)+": \nTitle: "+ cursor.getString(1)+"\nDescription: "+cursor.getString(2)+"\nStart Date: "+new Date(cursor.getLong(3))+"\nEnd Date : "+new Date(cursor.getLong(4))+"\nLocation : "+cursor.getString(5);
            if(add == null)
                add = CalNames[i];
            else{
                add += CalNames[i];
            }           
            ((TextView)findViewById(R.id.calendars)).setText(add);
    
            cursor.moveToNext();
        }
        cursor.close();
    

    此外,不要忘记添加此权限:

    <uses-permission android:name="android.permission.READ_CALENDAR"/>
    <uses-permission android:name="android.permission.WRITE_CALENDAR"/>