デフォルトで同期しないようにSyncadapterを定義するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/9393195

  •  29-10-2019
  •  | 
  •  

質問

そのため、アプリに実装されたシンカダプターがあります。 Googleタスクと同期しているため、ユーザーの既存のGoogleアカウントを使用しています。アプリでは、ユーザーは設定に移動し、同期を有効にし、アカウントを選択する必要があります。この時点で、私はAuthTokenを取得しようとします。これにより、選択したGoogleアカウントを使用するようにアプリに許可するようユーザーに求めるポップアップが作成されます。

enter image description here

ユーザーが以前にアプリをインストールしたことがない場合、これはすべてうまく機能します。ただし、ユーザーがアプリをアンインストールして後で再インストールすると仮定します。アプリを開くと、もちろん設定がチェックされません。しかし、彼らが見つけるのは、アプリが以前に選択された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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top