17

イベントをカレンダーに追加するための次のコードがあります。

問題は、デフォルトのカレンダー IDを取得する方法がわからないことです。

long calID = 3;
long startMillis = 0; 
long endMillis = 0;     
Calendar beginTime = Calendar.getInstance();
beginTime.set(2013, 3, 23, 7, 30);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2013, 3, 24, 8, 45);
endMillis = endTime.getTimeInMillis();

ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(Events.DTSTART, startMillis);
values.put(Events.DTEND, endMillis);
values.put(Events.TITLE, "My Test");
values.put(Events.DESCRIPTION, "My Calendar Test");
values.put(Events.CALENDAR_ID, calID);
values.put(Events.EVENT_TIMEZONE, "Israel/tel-aviv");
Uri uri = cr.insert(Events.CONTENT_URI, values);

行:long calID = 3;はカレンダー ID です

Android からデフォルトのカレンダー ID を取得することは可能ですか、それともカレンダーのリストを表示してユーザーに選択させる必要がありますか?

不可能な場合、カレンダー アカウントのリストを表示するにはどうすればよいですか?

4

5 に答える 5

17

カレンダーのリストを取得するには、次のように ContentResolver をクエリする必要があります。

public MyCalendar [] getCalendar(Context c) {

    String projection[] = {"_id", "calendar_displayName"};
    Uri calendars;
    calendars = Uri.parse("content://com.android.calendar/calendars");

    ContentResolver contentResolver = c.getContentResolver();
    Cursor managedCursor = contentResolver.query(calendars, projection, null, null, null);

    if (managedCursor.moveToFirst()){
        m_calendars = new MyCalendar[managedCursor.getCount()];
        String calName;
        String calID;
        int cont= 0;
        int nameCol = managedCursor.getColumnIndex(projection[1]);
        int idCol = managedCursor.getColumnIndex(projection[0]);
        do {
            calName = managedCursor.getString(nameCol);
            calID = managedCursor.getString(idCol);
            m_calendars[cont] = new MyCalendar(calName, calID);
            cont++;
        } while(managedCursor.moveToNext());
        managedCursor.close();
    }
    return m_calendars;

}
于 2013-05-20T17:07:21.787 に答える
4

一部の最新バージョンには問題があり、表示されるカレンダー リストが異なるため、以下は PRIMARY カレンダーを選択するコードです。古いデバイスでは、このクエリは 0 レコードを返すため、最初のカレンダーが 0 レコードを返す場合は 2 番目のカレンダーを使用します。

Cursor calCursor = mContext.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1 AND "  + CalendarContract.Calendars.IS_PRIMARY + "=1", null, CalendarContract.Calendars._ID + " ASC");
if(calCursor.getCount() <= 0){
    calCursor = mContext.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, projection, CalendarContract.Calendars.VISIBLE + " = 1", null, CalendarContract.Calendars._ID + " ASC");
}
于 2017-01-02T09:48:22.500 に答える