设定日历数据类
public class Scheduler { /** * event id */ private long eventID; /** * the scheduler's date, like "MM/dd/yyyy" */ private String date; /** * the value of begin time */ private String beginTime; /** * the value of end time */ private String endTime; /** * the scheduler's title */ private String title; /** * the scheduler's description */ private String description; public long getEventID() { return eventID; } public void setEventID(long eventID) { this.eventID = eventID; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getBeginTime() { return beginTime; } public void setBeginTime(String beginTime) { this.beginTime = beginTime; } public String getEndTime() { return endTime; } public void setEndTime(String endTime) { this.endTime = endTime; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
直接能用,接口做了sdk版本控制,4.0一下的sdk不支持该Calendar,会直接返回null
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import android.content.ContentResolver; import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.provider.CalendarContract.Instances; /** * quert scheduler from google calendar today * @author zoeice * */ public class QueryScheduler { public static final String[] INSTANCE_PROJECTION = new String[] { Instances.EVENT_ID, // 0 Instances.BEGIN, // 1 Instances.END, //2 Instances.TITLE, // 3 Instances.DESCRIPTION //4 }; // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_BEGIN_INDEX = 1; private static final int PROJECTION_END_INDEX = 2; private static final int PROJECTION_TITLE_INDEX = 3; private static final int PROJECTION_DESCRIPTION_INDEX = 4; private Context context; public QueryScheduler(Context context) { super(); this.context = context; } /** * query scheduler only today */ public ArrayList<Scheduler> queryGoogleCalendar(){ int sdkVersion = android.os.Build.VERSION.SDK_INT; if(sdkVersion >= 14){ ArrayList<Scheduler> list = new ArrayList<Scheduler>(); // Specify the date range you want to search for recurring // event instances Calendar beginTime = Calendar.getInstance(); beginTime.set(beginTime.get(Calendar.YEAR), beginTime.get(Calendar.MONTH), beginTime.get(Calendar.DAY_OF_MONTH) , 0, 0); long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(endTime.get(Calendar.YEAR), endTime.get(Calendar.MONTH), endTime.get(Calendar.DAY_OF_MONTH) , 23, 59); long endMillis = endTime.getTimeInMillis(); Cursor cur = null; ContentResolver cr = context.getContentResolver(); // Construct the query with the desired date range. Uri.Builder builder = Instances.CONTENT_URI.buildUpon(); ContentUris.appendId(builder, startMillis); ContentUris.appendId(builder, endMillis); // Submit the query cur = cr.query(builder.build(), INSTANCE_PROJECTION, null, null, null); while (cur.moveToNext()) { String title = null; String description = null; long eventID = 0; long beginVal = 0; long endVal = 0; // Get the field values eventID = cur.getLong(PROJECTION_ID_INDEX); beginVal = cur.getLong(PROJECTION_BEGIN_INDEX); endVal = cur.getLong(PROJECTION_END_INDEX); title = cur.getString(PROJECTION_TITLE_INDEX); description = cur.getString(PROJECTION_DESCRIPTION_INDEX); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(beginVal); DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm"); Scheduler scheduler = new Scheduler(); scheduler.setEventID(eventID); scheduler.setBeginTime(formatter.format(calendar.getTime()).substring(11)); calendar.setTimeInMillis(endVal); scheduler.setEndTime(formatter.format(calendar.getTime()).substring(11)); scheduler.setTitle(title); scheduler.setDescription(description); scheduler.setDate(formatter.format(calendar.getTime()).substring(0, 10)); list.add(scheduler); } if(list.size() > 0){ return list; }else{ return null; } }else{ return null; } } }
通过google账户查询的话用如下方法:
// Projection array. Creating indices for this array instead of doing // dynamic lookups improves performance. public static final String[] EVENT_PROJECTION = new String[] { Calendars._ID, // 0 Calendars.ACCOUNT_NAME, // 1 Calendars.CALENDAR_DISPLAY_NAME, // 2 Calendars.OWNER_ACCOUNT // 3 }; // The indices for the projection array above. private static final int PROJECTION_ID_INDEX = 0; private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;
// Run query Cursor cur = null; ContentResolver cr = getContentResolver(); Uri uri = Calendars.CONTENT_URI; String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" + Calendars.ACCOUNT_TYPE + " = ?) AND (" + Calendars.OWNER_ACCOUNT + " = ?))"; String[] selectionArgs = new String[] {"[email protected]", "com.google", "[email protected]"}; // Submit the query and get a Cursor object back. cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);
往Calendars插入事件详细api查询http://developer.android.com/guide/topics/providers/calendar-provider.html