Question

J'ai donc un syncadapter implémenté dans mon application. J'utilise le compte Google existant de l'utilisateur car je suis en train de se synchroniser avec les tâches Google. Dans l'application, les utilisateurs doivent aller aux préférences, activer la synchronisation et sélectionner un compte. À ce stade, j'essaie de récupérer un authtoken qui créera un fenêtre contextuelle demandant à l'utilisateur d'autoriser mon application à utiliser son compte Google sélectionné.

enter image description here

Tout cela fonctionne très bien si l'utilisateur n'a jamais installé mon application auparavant. Mais supposons maintenant que l'utilisateur dénoute l'application et le réinstalle plus tard. Lorsqu'ils ouvrent l'application, les paramètres ne seront pas contrôlés bien sûr. Mais ce qu'ils trouveront, c'est que l'application se synchronise avec leur compte Google précédemment sélectionné!

La raison en est que le syncadapter est basculé pour synchroniser par défaut. Par exemple, c'est la vue dans l'écran des comptes et de la synchronisation après l'installation avant que toutes les modifications aient été apportées:

Il est vérifié par défaut. Lors de l'installation, cela n'a pas d'importance car mon application n'est pas encore approuvée pour accéder à leur compte Google. Mais lors de la réinstallation, cela importe. Ma question est donc: De quoi ai-je besoin d'ajouter / changer / supprimer pour le rendre non contrôlé par défaut?

Mon syncadapter.xml est le suivant:

<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" />

Et dans le manifeste:

<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>

Je ne fais aucun appel dans le code Java concernant la synchronisation jusqu'à ce que l'utilisateur ne sélectionne un compte dans les paramètres.

Était-ce utile?

La solution

Vous pouvez stocker un partage de partage et le vérifier sur SyncService Start. Si faux, arrêtez le service et ne faites rien.

N'oubliez pas de .Apply () ou .Commit () Votre nouvelle valeur de préférence partagée lorsque vous la définissez à partir de la configuration utilisateur pour activer Sync.

Autres conseils

ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, false);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top