CalendarContract的Android解析程序查询



我正在尝试编写一个应用程序来转储日历条目以供参考和备份。首先,我尝试使用下面的代码转储CalendarContract的列名,但它总是失败,只有一个例外:

try {
Cursor cur = Resolver.query(CalendarContract.CONTENT_URI, null, null, null, null);
// print column names...
}
catch( Exception e ) {
Log.i( "MYAPP", "Exception on Resolver.query: "+e);  // ALWAYS HAPPENS
return;
}

例外是"java.lang.IollegalArgumentException:未知URLcontent://com.android.calendar">

自动完成显示";CalendarContract.CONTENT_URI";是有效成员
我还尝试使用类似的查询转储Contacts列名,效果很好:

Cursor cur = Resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
// print column names  

注意:我在三星S9上运行安卓V10。

我做错了什么

此content_uri无法直接查询,您可能需要使用CalendarContract.Events.CONTENT_URI

阅读此处的文档:https://developer.android.com/reference/android/provider/CalendarContract

更具体地说:https://developer.android.com/reference/android/provider/CalendarContract.Events

基于@marmor的响应,我可以像这样进行查询…

Cursor cur = Resolver.query( CalendarContract.Events.CONTENT_URI );
int ncol = cur.getColumnCount();
for( int indx=0; indx<ncol; indx++ ) {
String colname = cur.getColumnName( indx );
// print indx, colname here
}

在我的设备上,标题是索引+73,日期/时间(毫秒(是索引+47。所以

String title = cur.getString( 73 );
Long msec    = cur.getLong( 47 );  

我用"SimpleDataFormat(("格式化了"msec",并打印了数据和标题。例如:

12/31/2021  "New Year's Eve"
etc...

这就是我的目标。