3

我在我的应用程序中广泛使用同步适配器来实现其核心功能。我还使用同步适配器提供的定期刷新。因此,如果手机上的“帐户和同步”被禁用,我的应用程序将毫无用处。执行 ContentResolver.setMasterSyncAutomatically(true) 来打开同步是否被认为是一种不好的做法或粗鲁。仅仅做一个 ContentResolver.setIsSyncable 并没有帮助,因为如果主帐户和同步被禁用,那么定期同步就不起作用。处理这种情况的常用方法是什么?

提前致谢,

-v-

4

1 回答 1

15

我称之为不好的做法。

同步有两个不同的启用标志,它们提供不同的功能。

无论帐户类型或内容类型如何,主同步都是所有同步的单个启用标志。此设置是“帐户与同步”页面上的“自动同步”,用户通常将其关闭以节省电量。一些用户可能(ab)使用它进入一种“请勿打扰”模式。以编程方式,这是通过检查和取消检查的ContentResolver.setMasterSyncAutomatically()

其次,您的帐户/权限对有一个启用标志。所以,说一个谷歌帐户。你点击谷歌账户,然后你会得到一个子页面......同步驱动器,同步谷歌播放音乐,同步联系人,同步gmail......等等。每个都是一个帐户(com.google)和一个权限(com.google)。 android.contacts),配对在一起。它们是单独可控的,所以我可以拥有一个同步联系人但不能同步我的日历的谷歌帐户。此外,即使列表中的可用项目可能会有所不同——我可能有一个帐户安装了谷歌音乐,但另一个没有安装——因此该子页面中的内容列表可能会有所不同,选中或未选中的内容可能会有所不同。请注意,如果附加了可同步的授权,则该帐户会显示一个绿色的同步圆圈,但该帐户本身不是孤立的 sycable。以编程方式,ContentResolver.setSyncAutomatically(), 并通过 启用/禁用(灰显)ContentResolver.setIsSyncable()。未配置时,您会将其变灰。

您的应用完全有权为其自己的帐户/权限对打开和关闭同步(尽管您应该尊重用户的意愿。)像应用同步设置页面上的“同步启用”复选框一样思考,它反映了与/从的状态A&S 子页面通过(get/set)SyncAutomatically()

是的,您的应用程序可以更改主同步标志——但在这样做时,您确实需要考虑您是否会越过用户的头脑来决定他们的手机如何工作。这可以帮助不知道如何使用手机的用户,并且会认真惹恼这样做的用户。我会在未经我许可的情况下立即卸载更改了我的手机范围同步设置的应用程序。我个人最想走的可能是在用户配置同步时向用户弹出一个对话框——“同步已配置,但在“帐户和同步”页面中打开自动同步之前不会执行。你想打开开启自动同步?” 然后发出一个意图,将他们带到 A&S 页面,如果他们同意,则将其打开。这有助于用户了解他们的手机是如何工作的,而不是仅仅在背后改变一些东西,让它变得更加神秘。

总体而言,您不应该在未经用户同意的情况下重新配置手机。

于 2012-07-17T14:09:06.617 回答