-1

我正在尝试在 Android 应用程序的日历中实现查找和选择事件。我相信,find 和 select 有完全不同的实现。

我搜索了网络无济于事。我将不胜感激。

4

2 回答 2

5

manifest

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

这些示例适用于 <= 2.1 版本;

第一的; 找出存在哪些日历

Cursor cursor = cr.query(Uri.parse("content://calendar/calendars"), new String[]{ "_id",  "displayname" }, null, null, 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] = cursor.getString(1);
    cursor.moveToNext();
}
cursor.close();

获取所有事件,特定事件是通过指定 range 来完成的
ContentResolver contentResolver = getContentResolver()

Uri.Builder builder = Uri.parse(getCalendarUriBase() + "/instances/when").buildUpon();
        long now = new Date().getTime();
        ContentUris.appendId(builder, now - DateUtils.MILLIS_PER_DAY*10000);
        ContentUris.appendId(builder, now + DateUtils.MILLIS_PER_DAY * 10000);

然后假设您希望从 ID = 1 的日历中记录事件 ID

Cursor eventCursor = contentResolver.query(builder.build(),
                new String[] { "event_id"}, "Calendars._id=" + 1,
                null, "startDay ASC, startMinute ASC"); 
        // For a full list of available columns see http://tinyurl.com/yfbg76w
        while (eventCursor.moveToNext()) {
            String uid2 = eventCursor.getString(0);
            Log.v("eventID : ", uid2);

        }

对于一些源代码,请查看 Jim Blackler 的Accessing the internal calendar database inside Google Android applicationsAndroid Calendar Events

于 2011-08-02T09:45:36.697 回答
0

它仅适用于 2.2+ 版本

我使用下面的代码在日历中添加事件

if (Build.VERSION.SDK_INT >= 14) {
            Calendar cal = Calendar.getInstance();
            Intent intent = new Intent(Intent.ACTION_INSERT)
                    .setData(Events.CONTENT_URI)
                    /*
                     * .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
                     * beginTime.getTimeInMillis())
                     * .putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
                     * endTime.getTimeInMillis())
                     */
                    .putExtra(Events.TITLE,
                            "A Test Event from android app by Neha ")
                    .

                    putExtra("beginTime", cal.getTimeInMillis())
                    .putExtra("allDay", true)
                    .putExtra("rrule", "FREQ=YEARLY")
                    .putExtra("endTime",
                            cal.getTimeInMillis() + 60 * 60 * 1000)
                    .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
            startActivity(intent);
        }

        else {
            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 by Neha");
            startActivity(intent);
        }

下面的代码我用来编辑事件

long calendarEventID = GetMaxID();
        Uri uri = Uri.parse("content://com.android.calendar/events/"
                + String.valueOf(calendarEventID));

        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(uri);

        intent.putExtra("beginTime", startDate);
        intent.putExtra("endTime", endDate);
        startActivity(intent);

和 GetMaxId 为

公共长 GetMaxID() {

    ContentResolver contentResolver = getContentResolver();

    Uri local_uri;
    local_uri = Uri.parse("content://com.android.calendar/events");

    Cursor cursor = contentResolver.query(local_uri, new String[] {
            "_id as max_id", "dtstart", "dtend" }, null, null, "_id");

    cursor.moveToFirst();
    long max_val = cursor.getLong(cursor.getColumnIndex("max_id"));

    startDate = cursor.getLong(cursor.getColumnIndex("dtstart"));
    endDate = cursor.getLong(cursor.getColumnIndex("dtend"));

    return max_val + 1;

}

并将许可放入清单中

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

希望它对某人也有帮助。

于 2013-06-02T17:08:47.587 回答