web-dev-qa-db-fra.com

Adaptateur de synchronisation sans compte

J'ai besoin de récupérer des données sur le cloud depuis mon application. J'ai regardé la vidéo google IO sur RESTful Android apps @ http://www.youtube.com/watch?v=xHXn3Kg2IQE&t = 43m58s Il recommande dans les diapositives finales d'utiliser un SyncAdapter pour s'intégrer au système Android Android.

Plus tard, j'ai appris qu'il fallait utiliser un compte pour implémenter SyncAdapter. Mon application n'utilise pas de compte. Les utilisateurs peuvent télécharger librement des données sans inscription. Puis-je toujours utiliser SyncAdapter? Existe-t-il un compte factice de stock que je pourrais utiliser?

Modifier: j'ai un fournisseur de contenu pour mon application, donc ce n'est pas un problème

Edit2: Je viens de regarder les applications Météo et Stock sous Paramètres -> Comptes et synchronisation. Vous pouvez voir qu'ils autorisent la synchronisation, mais n'ont pas de bouton de suppression de compte. D'autre part, les applications Google, Facebook et Skype permettent la synchronisation PLUS elles ont un bouton de suppression de compte. Cela signifie que Weather et Stock n'utilisent pas de comptes, contrairement à Google, Facebook et Skype.

Les tutoriels que j'ai trouvés @ http://ericmiles.wordpress.com/2010/09/22/connecting-the-dots-with-Android-syncadapter/ et @ http: // www.c99.org/2010/01/23/writing-an-Android-sync-provider-part-1/ dites que l'on DOIT avoir un compte pour utiliser Sync Adapter. : S ???

41
siamii

J'ai créé un adaptateur de synchronisation des contacts sur lequel je n'ai pas d'autorisation de compte et/ou d'écrans de configuration. Ce n'était pas si difficile. Je ne pense pas que devoir faire face à la Android trucs de compte était autant une affaire.

Citation de votre lien tutoriel:

La mauvaise nouvelle est qu'il n'y a pas de fonctionnalité "stock" pour vous donner un moyen facile de fournir un compte au système. Cependant, dans le même exemple d'adaptateur de synchronisation fourni avec le SDK, il y a beaucoup de code que vous pouvez emprunter pour vous donner la fonctionnalité de compte. À moins que vous ne désiriez un écran d'informations d'identification personnalisé, vous pouvez hériter tout le code du package com.example.Android.samplesync.authenticator avec seulement quelques modifications mineures.

Il s'agit donc simplement d'un copier-coller de l'exemple, c'est à peu près ce que j'ai fait et cela a bien fonctionné.

Je ne sais pas avec certitude, mais tous les adaptateurs qui n'ont pas "Supprimer le compte" semblent être des adaptateurs intégrés ROM sur tous les appareils que j'ai consultés. Je suis pas sûr que vous ayez à vous en inquiéter.

11
Shane Powell

Comme le disent les Android documentation des développeurs

Même si votre application n'utilise pas de comptes, vous devez toujours fournir un composant d'authentification. Si vous n'utilisez pas de comptes ou de connexion au serveur, les informations gérées par l'authentificateur sont ignorées, vous pouvez donc fournir un composant d'authentification qui contient des implémentations de méthode de stub. Vous devez également fournir un service lié qui permet au cadre de l'adaptateur de synchronisation d'appeler les méthodes de l'authentificateur.

Il y a un article entier sur Création d'un authentificateur de talon . Je me rends compte que cette question est ancienne et qu'une réponse a été acceptée il y a longtemps, mais je pensais qu'un ajout récent aux documents officiels devrait être inclus ici.

18
nindalf

Je reçois de nombreuses notifications de cette question, j'ai donc pensé partager ces informations. Voici comment ajouter SyncAdapter sans compte. Vous pouvez mettre ceci dans onCreate de MyApplication extends Application classe. Cela suppose que vous disposez déjà d'un SyncAdapter et ContentProvider. Vous pouvez le faire en suivant les didacticiels répertoriés dans la question.

final String ACCOUNT_NAME = "MyApp";
final String ACCOUNT_TYPE = "com.myapp.account";
final String PROVIDER = "com.myapp.provider";

Account appAccount = new Account(ACCOUNT_NAME,ACCOUNT_TYPE);
AccountManager accountManager = AccountManager.get(getApplicationContext());
if (accountManager.addAccountExplicitly(appAccount, null, null)) {
   ContentResolver.setIsSyncable(appAccount, PROVIDER, 1);
   ContentResolver.setMasterSyncAutomatically(true);
   ContentResolver.setSyncAutomatically(appAccount, PROVIDER, true);
}

res/xml/syncadapter.xml

<sync-adapter xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:contentAuthority="@string/provider"
    Android:accountType="@string/account_type"  
    Android:userVisible="true"  
    Android:supportsUploading="true"
/>

res/xml/authentiqueator.xml

<account-authenticator xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:accountType="@string/account_type"
    Android:icon="@drawable/app_icon"
    Android:smallIcon="@drawable/app_icon"
    Android:label="@string/app_label"
/>
12
siamii