通过Calendar API以编程方式创建的日历默认情况下在应用中不可见

时间:2016-06-24 21:13:18

标签: android synchronization google-calendar-api

我正在编写一个应用程序,该应用程序接收来自API调用的事件并通过Google的Calendar API创建新的自定义日历,然后根据需要添加添加/删除/更新事件和日历。一切都很好。我遇到的问题是默认情况下,自定义日历在Android Google日历应用中无法显示。用户必须刷新然后设置>>>显示更多(在相应的Google帐户>>>选择日历名称>>>手动选择同步开关,然后他们才能看到应用创建的日历和事件。我担心许多用户可能不会知道他们需要执行这些额外的步骤才能使日历显示在日历应用程序中。

Google Calendar API:https://developers.google.com/google-apps/calendar/v3/reference/

我没有在Calendar API文档中看到任何允许我以编程方式将我创建的日历设置为同步/可见的方法。有谁知道这是否可能?如果是这样,你介意指点我正确的方向吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

应用程序和同步适配器可以使用Calender Provider API。规则取决于拨打电话的程序类型。本文档主要侧重于将Calendar Provider API用作应用程序。

通过Calendar Provider API,应用程序和同步适配器可以对包含用户日历数据的数据库表进行读/写访问。

同步适配器将用户设备上的日历数据与其他服务器或数据源同步。在CalendarContract.CalendarsCalendarContract.Events表中,有一些列保留供同步适配器使用。提供者和应用程序不应修改它们。实际上,除非将它们作为同步适配器进行访问,否则它们不可见。

要读取日历数据,应用程序必须在其清单文件中包含READ_CALENDAR权限。它必须包含WRITE_CALENDAR权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"...>
<uses-sdk android:minSdkVersion="14" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
...
</manifest>

这是一个帮助方法,可用于返回用于同步适配器的URI:

static Uri asSyncAdapter(Uri uri, String account, String accountType) {
return uri.buildUpon()
.appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true")
.appendQueryParameter(Calendars.ACCOUNT_NAME, account)
.appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
}

有关同步适配器的示例实现,请参阅SampleSyncAdapter:https://developer.android.com/samples/index.html