3

所以我在我的应用程序中实现了一个 SyncAdapter。因为我正在与 Google Tasks 同步,所以我使用用户的现有 Google 帐户。在应用程序中,用户必须转到首选项,启用同步并选择一个帐户。此时,我尝试获取一个 authToken,它将创建一个弹出窗口,要求用户授权我的应用程序使用他们选择的 Google 帐户。

在此处输入图像描述

如果用户以前从未安装过我的应用程序,这一切都很好。但是,现在假设用户卸载应用程序并在以后重新安装它。当他们打开应用程序时,这些设置当然不会被选中。但他们会发现,该应用程序无论如何都会与他们之前选择的 Google 帐户同步!

原因是 SyncAdapter 默认切换为同步。例如,这是安装后在进行任何更改之前的 Accounts & Sync 屏幕中的视图:

默认选中同步。首次安装时这并不重要,因为我的应用尚未获准访问他们的 Google 帐户。但是在重新安装时,它确实很重要。所以我的问题是:我需要添加/更改/删除什么才能使其默认未选中?

我的syncadapter.xml如下:

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="com.nononsenseapps.NotePad"
    android:accountType="com.google"
    android:supportsUploading="true"
    android:userVisible="true" />

在清单中:

<service
    android:name=".sync.SyncService"
    android:exported="true" >
    <intent-filter>
        <action android:name="android.content.SyncAdapter" />
    </intent-filter>

    <meta-data
        android:name="android.content.SyncAdapter"
        android:resource="@xml/syncadapter" />
</service>

在用户在设置中选择帐户之前,我不会在 Java 代码中进行任何有关同步的调用。

4

2 回答 2

1
ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, false);
于 2012-04-11T14:36:36.987 回答
0

您可以存储 SharedPreference 并在 SyncService 启动时检查它。如果为 false,则停止服务并且不执行任何操作。

当您从用户配置中设置新的共享偏好值以启用同步时,请记住 .apply() 或 .commit()。

于 2012-02-23T09:56:07.057 回答