"Too many Calendar deletes" 错误来自 Android 日历提供商

"Too many Calendar deletes" error by Android calendar provider

我正在使用日历提供程序来创建和删除事件。

当我尝试删除事件时,某些设备出现问题。 Android OS 显示一条通知:

"Too many Calendar deletes"

有继续进行的选项。

我无法在 Android 中找到修复它的答案,只能阅读日历 API 限制。但是通过此通知向客户提供功能是不可接受的。

我在运行下面一行删除一个事件:

context.getContentResolver().delete(eventUri, null, null);

谢谢!

恐怕没有绕过此消息的“正确”方法,您也不应该尝试。这是因为同步适配器在尝试同步后将 tooManyDeletions flag in the SyncResult 对象设置为 true。 如果标志设置为 true.

,同步管理器将始终显示此消息

允许删除的数量由相应的同步适配器或同步到的 API 定义。因此,如果您看到该消息取决于帐户类型,甚至可能取决于同步适配器的版本。

这是一种保护用户数据不被错误删除的机制(无论是他自己还是被损坏的软件)。

您可以尝试通过在您的代码设置 SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS 标志的相应帐户上触发同步来欺骗 SyncManager 和同步适配器,但您真的不应该这样做那。实际上,如果它有效,我会认为这是 Android 中的一个错误。

您应该将此传达给用户并将其作为一项功能进行销售。

更新:

要触发与 SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS 的同步,请调用:

Bundle extras = new Bundle();
extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
extras.putBoolean(ContentResolver.SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS, true);
ContentResolver.requestSync(accountOfCalendar, CalendarContract.Authority, extras);

accountOfCalendar 是您从中删除事件的日历的帐户。

小心使用。