【问题标题】:Calendar Programmatically Created via Calendar API is not Visible in App by Default默认情况下,通过日历 API 以编程方式创建的日历在应用程序中不可见
【发布时间】:2016-06-26 15:56:21
【问题描述】:

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

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

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

提前谢谢你!

【问题讨论】:

    标签: android synchronization google-calendar-api


    【解决方案1】:

    Calender Provider API 可供应用程序和同步适配器使用。规则根据发出调用的程序类型而有所不同。本文档主要关注将日历提供程序 API 用作应用程序。

    通过日历提供程序 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      相关资源
      最近更新 更多