我正在尝试在 Android 应用程序的日历中实现查找和选择事件。我相信,find 和 select 有完全不同的实现。
我搜索了网络无济于事。我将不胜感激。
我正在尝试在 Android 应用程序的日历中实现查找和选择事件。我相信,find 和 select 有完全不同的实现。
我搜索了网络无济于事。我将不胜感激。
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 applications和Android Calendar Events
它仅适用于 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>
希望它对某人也有帮助。