Android 阅读及;将事件插入日历

Android 阅读及;将事件插入日历,android,android-calendar,Android,Android Calendar,我正在使用以下代码将事件(以编程方式,而不是通过意图)插入到特定的日历(使用其ID) “插入”功能非常好,我正在保存事件id: uri.getLastPathSegment() 但问题是如何从特定日历中读取此特定事件 感谢您的帮助您可以使用contentResolver查询CalendarContract.Events,并在eventId上进行选择 要获取calendarId,如下所示: Uri calUri = CalendarContract.Calendars.CONTENT_URI.bu

我正在使用以下代码将事件(以编程方式,而不是通过意图)插入到特定的日历(使用其ID)

“插入”功能非常好,我正在保存事件id: uri.getLastPathSegment()

但问题是如何从特定日历中读取此特定事件


感谢您的帮助

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

要获取calendarId,如下所示:

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);

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

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();
Cursor Cursor=cr.query(Uri.parse(“content://calendar/events),新字符串[]{“日历id”、“标题”、“说明”、“dtstart”、“dtend”、“eventLocation”},null,null,null);
//Cursor=cr.query(Uri.parse(“content://calendar/calendars),新字符串[]{“\u id”,“name”},null,null,null);
字符串add=null;
cursor.moveToFirst();
String[]CalNames=新字符串[cursor.getCount()];
int[]CalIds=newint[cursor.getCount()];
对于(int i=0;i
另外,不要忘记添加以下权限:

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


尝试过,但它给了我其他日历的事件,需要指定日历id…很奇怪,您可以插入数据库,但无法查询,并且需要在日历上执行一些逻辑。。。我会把这个标记为一个答案,即使它对我没有多大帮助。他问的是如何检索它,而不是如何插入它。另外,您应该使用常量,而不是硬编码的字符串。您可以将此代码放入函数中,然后输入要在事件中插入的值。
<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>