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

Calendar Programmatically Created via Calendar API is not Visible in App by Default

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

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

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

提前致谢!

Calender Provider API 可供应用程序和同步适配器使用。规则因进行调用的程序类型而异。本文档主要关注如何将 Calendar Provider API 用作应用程序。

通过日历提供程序 API,应用程序和同步适配器可以 read/write 访问保存用户日历数据的数据库表。

同步适配器将用户设备上的日历数据与另一个服务器或数据源同步。在 CalendarContract.Calendars and CalendarContract.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>

这是一个辅助方法,您可以使用它来 return 与同步适配器一起使用的 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