デフォルトで同期しないようにSyncadapterを定義するにはどうすればよいですか?
-
29-10-2019 - |
質問
そのため、アプリに実装されたシンカダプターがあります。 Googleタスクと同期しているため、ユーザーの既存のGoogleアカウントを使用しています。アプリでは、ユーザーは設定に移動し、同期を有効にし、アカウントを選択する必要があります。この時点で、私はAuthTokenを取得しようとします。これにより、選択したGoogleアカウントを使用するようにアプリに許可するようユーザーに求めるポップアップが作成されます。
ユーザーが以前にアプリをインストールしたことがない場合、これはすべてうまく機能します。ただし、ユーザーがアプリをアンインストールして後で再インストールすると仮定します。アプリを開くと、もちろん設定がチェックされません。しかし、彼らが見つけるのは、アプリが以前に選択されたGoogleアカウントととにかく同期していることです!
その理由は、シンカダプターがデフォルトで同期するように切り替えられるためです。たとえば、これは、変更が行われる前のインストール後のアカウントと同期画面のビューです。
デフォルトで同期するようにチェックされます。最初にインストールすると、これは問題ではありません。私のアプリはまだ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コードに電話をかけません。
解決
SharedPreferenceを保存して、SyncService Startで確認できます。 FALSEの場合は、サービスを停止し、何もしないでください。
.Apply()または.commit()を忘れずに、syncを有効にするようにユーザー構成から設定したときに、新しい共有設定値を忘れないでください。
他のヒント
ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, false);