20 votes

Android SyncAdapter utilisant un compte google

J'ai écrit un SyncAdapter qui prend un compte "com.google" et effectue une synchronisation avec un service web appengine. En testant cela avec le testeur de synchronisation de dev tools (sur l'émulateur), cette synchronisation semble fonctionner parfaitement.

Le problème est qu'il n'y a pas de synchronisation par défaut. Et en allant sur le compte dans "comptes et synchronisation", mon compte Google est vide, comme si aucun service de synchronisation n'était disponible.

Je soupçonne que pour faire apparaître ma synchronisation dans le menu "Comptes et synchronisation", je devrais mettre en œuvre mon propre AccountAuthenticator qui ferait exactement la même chose que ce que je suppose que l'AccountAuthenticator de Google doit déjà faire. Ce n'est pas un travail passionnant, et cela semble très inutile. Donc :

  • existe-t-il un moyen d'ajouter une entrée au menu "accounts & sync" qui utilise mon SyncAdapter mais repose sur un compte google ? ou d'ajouter un sous-menu aux comptes google qui permet la synchronisation de mon service appengine ?

si non,

  • Existe-t-il un moyen de réutiliser l'AccountAuthenticator de Google dans un AccountAuthenticator que j'écris ?

23voto

gfxmonk Points 2981

Il s'avère donc que vous pouvez avoir un syncAdapter qui utilise un compte "com.google", mais cela nécessite d'écrire un ContentProvider correspondant. Par exemple, dans AndroidManifest.xml :

<service android:name=".sync.SyncAdapterService" android:exported="true" android:process=":contacts">
  <intent-filter>
    <action android:name="android.content.SyncAdapter" />
  </intent-filter>
  <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" />
</service>

et dans syncadapter.xml :

<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="net.gfxmonk.android.pagefeed"
    android:accountType="com.google"
    android:supportsUploading="false"
    android:userVisible="true"
/>

Alors vous debe avoir un ContentProvider avec l'autorité "net.gfxmonk.Android.pagefeed" afin qu'Android associe cette action de synchronisation à votre application. Une fois que vous avez cela (il n'a même pas besoin de faire quoi que ce soit de significatif, juste d'exister), votre programme peut apparaître dans le panneau de configuration "accounts & Sync" - dans votre compte google choisi.

Comme travail supplémentaire, vous pouvez avoir besoin d'appeler :

ContentResolver.setIsSyncable(account, "net.gfxmonk.android.pagefeed", 1)

avec account comme objet Account que vous voulez utiliser pour vos informations d'identification de synchronisation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X