android - 如何获取 Android 上具有日历的帐户列表?

标签 android api calendar accountmanager

我正在为 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_TYPECALENDAR_ACCESS_LEVELIS_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);

由于我们希望所有日历都启动,因此示例中的 selectionselectionArgs 变量没有用。

在我们得到查询的最终结果之前,基本上示例中的其他所有内容都保持不变。

一旦我们获得了数据,就可以对其进行解析并放入ListHashMap等中,并根据需要进行排序和过滤。

关于android - 如何获取 Android 上具有日历的帐户列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42259205/

相关文章:

设置为零秒的 java.util.Calendar 通过 jdbc 持续到 mysql 1 秒

javascript - 样式化 CLNDR.js 日历多日事件的第一天和最后一天

Android:如何在可移动图像上绘制矩形,使绘制的矩形也随图像一起移动?

安卓模拟器崩溃日志

python - Python Twitter Tools-处理Twitter 404和401 API错误

iphone - 是否有适用于移动设备的带有 SDK 的跨平台条码扫描器应用程序?

android - 日历与android中的自定义添加帐户同步

android - Titanium 无法识别 Windows 上的 Android SDK

android - 在使用 kotlin 的 android studio 中出现错误

javascript - 从 JSON API 接收错误值