Da ich herausgefunden habe, dass über einen Calender Intent keine Termine ausgelesen werden können (sondern nur neue erstellt, editiert oder gelöscht) habe ich nun angefangen mich in den Calendar Content Provider einzulesen.
Ich habe im Moment folgenden Code um mir alle Kalender aufzulisten:
// 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;
private ArrayList<String> calendars_array = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calendar);
ListView calList = (ListView)findViewById(R.id.listView1);
// Run query
Cursor cur = null;
ContentResolver cr = getContentResolver();
Uri uri = Calendars.CONTENT_URI;
String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND ("
+ Calendars.ACCOUNT_TYPE + " = ?))";
String[] selectionArgs = new String[] {"[email protected]", "com.google"};
// Submit the query and get a Cursor object back.
cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);
// Use the cursor to step through the returned records
while (cur.moveToNext()) {
long calID = 0;
String displayName = null;
String accountName = null;
String ownerName = null;
// Get the field values
calID = cur.getLong(PROJECTION_ID_INDEX);
displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX);
accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX);
ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX);
// Do something with the values...
calendars_array.add(displayName);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, calendars_array);
calList.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
Den habe ich ziehmlich 1:1 von der Google developper Seite.
Klappt auch soweit ganz gut, es werden mir nun alle verfügbaren Kalender in einer Listview angezeigt. Nun wäre es optimal, wenn ich durch einen Klick auf den jeweiligen Kalender alle darin enthaltenen Events aufgelistet bekäme.
So ganz steig ich noch nicht durch mit diesen Content Providern, vllt. hast du / ihr grad ne code idee / snippet dafür?
Danke schonmal!