Questions about Two Way Sync Using SyncAdapter and SyncService in android

by himanshu jain » Sat, 29 Jan 2011 08:22:17 GMT


Sponsored Links
 Hi All,

I am trying to implement two way sync.

1) I tried using SampleSyncAdapter Code first it works on emulator but
not on Device , then i tried to write SyncAdapter with SyncService as
a demo app with AccountAuthenticator, as per Documentation for
SampleSyncAdapter SyncService gets called on
ACTION_AUTHENTICATOR_INTENT but my service does not gets started on
device , i defined service in manifest and all things but does not
work on device it gets started on Emulator.

2) If i port my app on device i can see only first name and last name
fields how can i see all the fields available for contact
application ?? can i edit them also utilizing the same native
editor??.

3) I planning to add contentobserver for sync from device to cloud
whenever there is change corresponding to my account in contact table
i want to sync it after listening through contentobserver.Is that
correct ??.

thanks

-- 



Re: Questions about Two Way Sync Using SyncAdapter and SyncService in android

by Dmitri Plotnikov » Mon, 31 Jan 2011 03:42:44 GMT


 Hi Himanshu,

1) SampleSyncAdapter is still a good source of inspiration.  It has some
issues and plan to have them fixed in the nearest future.

2) In releases of Android from Eclair through Gingerbread integrated editing
of 3rd party contacts is poorly supported.  The trick is to insert a data
row, "Edit in MyApp", which would take the user to your app and your app
would then provide an editor activity.  Also, there is no provision in the
Contacts UI for creating new contacts in 3rd party accounts.  We have fixed
those issues in Honeycomb.  Now you can specify two activities in your
metadata xml file: one for creating new contacts and one for editing
existing ones and voil! - you have seamless integration.  Of course, it's a
bit too soon to rely on Honeycomb as the dominant version of Android ;-)  So
for now you will need to either go with the described hack or only allow
creation/editing of contacts through your app.

3) Please consider an alternative to using content observers for a sync
adapter.  There are several reasons:

- In order to receive notifications, your process will need to be running at
all times. Or it would have to have a broadcast receiver, which is very very
costly.
- Content observer notifications are not reliable.  If your process is not
running at the time the change occurs, the notification will never be
delivered.  A broadcast receiver will solve that problem, but please don't
use broadcast receivers for this!
- Contacts provider sends out non-discriminated notifications.  Whenever
anything (e.g. chat presence) changes, all observers are notified whether
they have supplied a specific URI or not.

What you do want to use is the DIRTY flag and the CALLER_IS_SYNCADAPTER
query parameter and let SyncManager invoke your sync adapter.  It does some
sophisticated scheduling and you want to take advantage of it.

Cheers,
- Dmitri






-- 


Sponsored Links


Re: Questions about Two Way Sync Using SyncAdapter and SyncService in android

by himanshu jain » Tue, 01 Feb 2011 05:37:47 GMT


 Dmitri

Thanks a lot for spending time to answer my questions at least some
doubts are faded off.

1) I understand to use own activity for editing and creating new
contacts.

2) Ok, if i avoid ContentObserver even i had that in mind might
require something to be running in background which is bad agreed.

3) But, there are two use cases first if there is a button that say
sync now and i send request using requestSync() method will it start
immediate sync via SyncManager or again it will depend upon
SyncManager discretion?? if thats true i cannot start immediate
Sync ??.

Second use case how would i know if there is a change corresponding
to my account in raw_contact utilizing best practice push
notification ?? so that i can trigger syncing.

thanks Dimitri for your time and ideas


On Jan 30, 11:42am, Dmitri Plotnikov <dplotni...@google.com> wrote:

--



Re: Re: Questions about Two Way Sync Using SyncAdapter and SyncService in android

by Dmitri Plotnikov » Tue, 01 Feb 2011 05:49:40 GMT


 ending requestSync to contentresolver is the right way to go if you want an
explicit button to request sync. This is what applications like Calendar and
Gmail do when you push the "Sync" button. ContentProvider will also request
sync whenever there is a change in the data.

You should query raw contacts that have the DIRTY flag set. These are the
added, deleted or changed contacts. Your sync adapter should reset this
flag after syncing up changes. It also needs to physically remove deleted
contacts from the database. In both cases it needs to supply the
CALLER_IS_SYNCADAPTER query parameter - otherwise the protocol won't work.

Cheers,
- Dmitri

On Mon, Jan 31, 2011 at 1:37 PM, himanshu jain <himanshu....@gmail.com>wrote:


--



Re: Questions about Two Way Sync Using SyncAdapter and SyncService in android

by himanshu jain » Tue, 01 Feb 2011 06:44:25 GMT


 Dmitri

thanks once again

But why my SyncService not gets started by SyncManager on Device i
dont know , and i explicitly call requestSync flow is not going inside
onPerformSync.?


thanks

On Jan 31, 1:49pm, Dmitri Plotnikov <dplotni...@google.com> wrote:

--



Re: Re: Questions about Two Way Sync Using SyncAdapter and SyncService in android

by Dmitri Plotnikov » Tue, 01 Feb 2011 08:11:45 GMT


 o you see your account in Settings/Accounts?   Does it have contact syncing
enabled?

On Mon, Jan 31, 2011 at 2:44 PM, himanshu jain <himanshu....@gmail.com>wrote:


--



Re: Questions about Two Way Sync Using SyncAdapter and SyncService in android

by himanshu jain » Tue, 01 Feb 2011 08:26:37 GMT


 Dmitri

Yes i created my account when i go to Account & sync section through
settings and after adding my account , sync gets enabled in DDMS i can
see SyncManager gets called twice once on setIsSyncable and on
setSyncAutomatically but My Service associated with SyncAdapter does
not gets started and also i dont reach to onPerformSync immediately
when i explicitly call requestSync.

thanks

On Jan 31, 4:11pm, Dmitri Plotnikov <dplotni...@google.com> wrote:

--



Re: Re: Questions about Two Way Sync Using SyncAdapter and SyncService in android

by Dmitri Plotnikov » Tue, 01 Feb 2011 08:54:21 GMT


  would double-check every line of AndroidManifest.xml, compare it with the
one in SampleSyncAdapter to see if anything's missing.

On Mon, Jan 31, 2011 at 4:26 PM, himanshu jain <himanshu....@gmail.com>wrote:


--



Other Threads

1. Android sounds

Is there any example code that shows how to create beep sounds of
variable tone and duration? Thanks for any advice

-- 

2. Android tutorial sites

Tutorial sites are very important for beginners, check out the list of
really good tutorial sites that I found.... http://bit.ly/aDxGrG

-- 

3. Preventing dialog auto-dismiss on button click

4. EXTRA_OUTPUT problem with video camera - breaks 'retake' and 'delete' buttons

5. Big difficult to develop in Android :( (I'm italian)

6. Slowing down gesture builder?

7. how display unicode characters