51 votes

Comment utiliser Android SyncAdapter?

J'essaie de comprendre le Android logique de synchronisation. Ce que je ne comprends pas, c'est le fichier syncadapter.xml contenues dans le kit SDK d'Android exemple de projet SampleSyncAdapter. Si vous avez téléchargé le SDK échantillons, il devrait être dans le dossier suivant:

SDK/android-sdk-PLATFORM/samples/android-VERSION/SampleSyncAdapter/res/xml/syncadapter.xml

J'ai lu, l'autorité d'un fournisseur de contenu doit être une chaîne ou une référence à une ressource. Quel est exactement le contenu de l'autorité et où est - com.android.contacts? Voici le contenu du fichier (w/o et les informations de licence des commentaires, des API de niveau 16).

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="com.android.contacts"
    android:accountType="com.example.android.samplesync"
    android:supportsUploading="false"
    android:userVisible="true"
/>

71voto

jcwenger Points 6988

Il existe deux méthodes de base que vous pouvez utiliser lors d'une SyncAdapter:

  1. Remplissez les données dans un ContentProvider.
  2. Créez votre propre ContentProvider pour stocker un nouveau type de données.

Le premier est ce qu'il se passe dans cet exemple d'application. Ils ont un site web qui a une liste de contacts, et ils veulent stocker ces avec les autres contacts sur l'appareil. Dans les deux cas, la façon dont tout cela fonctionne est grâce à une relation entre trois éléments:

  1. Un ContentProvider, qui stocke les données.
  2. Un SyncAdapter, qui communique avec un serveur distant à obtenir des données pour mettre dans le ContentProvider.
  3. Le Android ContentResolver, qui détermine la manière de coupler jusqu'SyncAdapters et ContentProviders.

Un appareil Android peut avoir beaucoup de différents ContentProviders et beaucoup de différents SyncAdapters. Depuis un ContentResolver peut-être pas partie de la même .apk comme un SyncAdapter, ContentResolver est un service système qui trouve le ContentProvider pour stocker un type de données. Il le fait en utilisant le ContentAuthority chaîne de caractères qui identifie de manière unique un ContentProvider. En outre, chaque ContentProvider doit être déclarée en AndroidManifest.xml assure qu'il peut être trouvé par la ContentResolver. Dans cette déclaration, vous pouvez spécifier si le ContentProvider peut être utilisé par d'autres applications, voir: android:exported.

<provider
    android:name=".CustomProvider"
    android:authorities="com.example.app.provider"
    android:exported="false"
    android:multiprocess="true" >
</provider>

Dans ce cas, utilisez une ContentProvider, vous aurez besoin de regarder la documentation de plate-forme pour voir ce que ContentAuthority chaîne qu'ils utilisent, et d'utiliser la même chaîne. Si vous voulez créer vos propres ContentProvider, vous avez juste besoin de s'assurer que les ContentAuthority vous créez est unique. La meilleure façon de le faire est d'utiliser des pièces de votre nom de domaine (classe java de style) dans l'Autorité. Les écrire dans l'ordre inverse. Ceci est illustré dans l'exemple de... com.android.contacts.

5voto

mobibob Points 2657

Lorsque votre APK est chargé, directives dans le manifeste dire le système d'exploitation à l'examen de toutes les méta-données. Dans ce cas, c'est le contenu méta-données pour Android contacts. Le nom qui est utilisé pour trouver le prestataire le est com.android.contacts (défini par Android) -- et le propriétaire a le "pouvoir" de fournir l'accès au contenu de sa base de données (c'est à dire, le ContentProvider).

N. B. Vous pourriez être un fournisseur de contenu de vos propres données, qui peut être synchronisé avec vos services web qui n'est pas de contacts. Les méta-données est un mécanisme pour enregistrer avec le système d'exploitation de sorte que vous pouvez le trouver lors d'un message de diffusion.

Ce méta-données associées à votre SyncAdapter en vertu de la synchronisation de type' que vous fournissez. Le nom du type est le android:accountType et peut-être", com.mycompany.myapp'. Cette clé est utilisée lors d'une diffusion à l'ensemble de synchronisation cartes et votre codé BroadcastReceiver va gérer le message avec votre type.

C'est le début de la relation et certaines répartition de la terminologie.

2voto

Nishant Shah Points 111

C'est une manière de créer une relation entre un type de Compte,de Synchronisation Adaptateur et un Contenu Autorité

En regardant en arrière, de nouveau, à AndroidManifest, cette étrange méta-données de la balise dans le service de Synchronisation est la pièce clé qui établit la liaison entre un ContentAuthority et un compte. L'extérieur fait référence à un autre fichier xml (appelez ça comme vous voulez, quelque chose de pertinent à votre application.)

Regardons sync_myapp.xml:

    <sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="com.android.contacts"
    android:accountType="com.example.android.samplesync"
    android:supportsUploading="false"
    android:userVisible="true" />

Il raconte Android que la synchronisation de l'adaptateur que nous avons définie (la classe qui a été appelé le nom de l'élément de l'étiquette qui comprend la balise qui inclut ce fichier, synchroniser les contacts à l'aide d'un com.exemple.android.samplesync style compte. Type de compte et de l'Autorité unique pour votre application.

Tous vos contentAuthority chaînes correspondent à tous, et en correspondance avec ce que vous synchronisez -- Ce doit être une chaîne de caractères que vous définissez, si vous êtes en train de créer votre propre base de données, ou vous devez utiliser certaines de périphérique existant chaînes si vous êtes à la synchronisation connu des types de données (comme les contacts ou le calendrier d'événements ou de ce que vous avez.) Le ci-dessus ("com.android.les contacts") se trouve être le ContentAuthority chaîne pour les contacts de type de données (surprise, surprise).

accountType doit également correspondre à l'un de ceux qu'on appelle les types de comptes qui sont déjà entrés, ou elle doit correspondre à celui que vous êtes en train de créer.

Dernière userVisible vrai moyens indiqués à l'utilisateur.

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