所以我在我的应用程序中实现了SyncAdapter。我使用用户现有的Google帐户,因为我正在与Google Tasks同步。在应用程序中,用户必须转到首选项,启用同步并选择一个帐户。此时我尝试获取一个authToken,它会创建一个弹出窗口,要求用户授权我的应用使用他们选择的Google帐户。
如果用户以前从未安装过我的应用程序,这一切都很有用。但是,现在假设用户卸载应用程序并在以后重新安装它。当他们打开应用程序时,当然会取消选中设置。但他们发现的是该应用程序与之前选择的Google帐户同步!
原因是默认情况下SyncAdapter切换为同步。例如。这是账户和账户中的视图。在进行任何更改之前安装后同步屏幕:
默认情况下会进行同步检查。首次安装时,这并不重要,因为我的应用尚未获准使用其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代码中进行任何有关同步的调用。
答案 0 :(得分:1)
ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, false);
答案 1 :(得分:0)
您可以存储SharedPreference并在SyncService start上进行检查。如果为false,请停止服务,不要做任何事情。
当您从用户配置设置为启用同步时,请记住.apply()或.commit()新的共享首选项值。