Android CalendarContract 的解析器查询?

Android Resolver Query for CalendarContract?

我正在尝试编写一个应用程序来转储日历条目以供参考和备份。首先,我尝试使用下面的代码转储 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;
}

例外情况是 "javal.lang.IllegalArgumentException:未知 URL content://com.android.calendar".

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

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

注意:我 运行 使用三星 S9 运行 Andoid 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,date/time(毫秒)是索引 +47。所以

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

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

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

这是我的目标。