我正在为 Android 编写一个应用程序,它在日历中为用户创建一系列事件,而普通的重复事件无法处理它。我想允许用户选择他们想要用于日历的帐户(主要是为了稍后共享日历)。
使用AccountManager,我可以获得所有帐户,但并非所有帐户都有日历。从技术上讲,Google 帐户可以使用,但我想使用 Exchange 帐户或其他也有日历的帐户。
我读过的所有 AccountManager API 文档都说要搜索的功能是特定于验证器的(并且可以更改)。保留这些内容的 list 几乎是不可能的。限制为已知帐户类型的列表比我真正想要的限制更多。
还有其他我错过的选择吗?
最佳答案
与我最初的想法相反,您实际上根本不需要触摸帐户列表。这有助于简化流程并减少所需权限的数量。
使用the information from this page (在查询日历下),您可以向日历表写入查询并获取日历及其所属帐户的完整列表。
最后,这种方法对我来说会更有用。基本上,EVENT_PROJECTION 根据示例所示进行了如下更改。
public static final String[] EVENT_PROJECTION = new String[] {
Calendars._ID,
Calendars.ACCOUNT_NAME,
Calendars.CALENDAR_DISPLAY_NAME,
Calendars.ACCOUNT_TYPE,
Calendars.CALENDAR_ACCESS_LEVEL,
Calendars.IS_PRIMARY
};
添加了 ACCOUNT_TYPE、CALENDAR_ACCESS_LEVEL 和 IS_PRIMARY,以便我们知道 a) 哪个日历是帐户的主要日历以便稍后排序,b )用户是否可以实际写入它,因为我们不希望它是只读的。
另外,在日历表的实际查询中,我做了以下更改。
// Run query
Cursor cur = null;
ContentResolver cr = getContentResolver();
Uri uri = Calendars.CONTENT_URI;
// Submit the query and get a Cursor object back.
cur = cr.query(uri, EVENT_PROJECTION, "", null, null);
由于我们希望所有日历都启动,因此示例中的 selection 和 selectionArgs 变量没有用。
在我们得到查询的最终结果之前,基本上示例中的其他所有内容都保持不变。
一旦我们获得了数据,就可以对其进行解析并放入List、HashMap等中,并根据需要进行排序和过滤。
关于android - 如何获取 Android 上具有日历的帐户列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42259205/