2012-02-22 21 views
2

私はSyncAdapterをアプリケーションに実装しています。私はGoogleタスクと同期しているので、ユーザーの既存のGoogleアカウントを使用します。このアプリでは、ユーザーは設定に行き、同期を有効にしてアカウントを選択する必要があります。この時点で、authTokenを取得しようとします。authTokenは、選択したGoogleアカウントを使用するように自分のアプリを認証するようにユーザーに要求するポップアップを作成します。SyncAdapterをデフォルトで同期しないように定義するにはどうすればよいですか?

http://i.imgur.com/X16vR.png

このユーザーは前に私のアプリをインストールしたことがない場合、すべてが素晴らしい作品。しかし、ユーザーがアプリをアンインストールして後で再インストールすると仮定します。彼らがアプリを開くと、設定はもちろんチェックされなくなります。しかし、彼らが見つけられるのは、アプリは以前に選択されたGoogleアカウントと同期するということです!

理由は、SyncAdapterがデフォルトで同期するように切り替えられているためです。例えば。 http://i.imgur.com/bZNtf.png

デフォルトで同期するようにチェックされます。これは後に何らかの変更が行われた前に、インストールアカウント&同期画面で図です。最初のインストールでは、私のアプリがまだ自分の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

SharedPreferenceを保存し、SyncService startで確認できます。 falseの場合は、サービスを停止して何もしないでください。

ユーザー設定から同期を有効にするには、新しい共有設定値を.apply()または.commit()に保存することを忘れないでください。

+0

これは確かに有効です。私が理解しているように、チェックボックスはアカウントと同期の権利でまだチェックされていますか?私はそれで生きることができます。 –

+0

これは私がこれまで行ってきたことです。 UIの部分も取り除くのはいいですね。 –

1
ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, false);