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. GPS fix status detection

Hi: Is there a standard solution to determine if the GPS is having a
fix?

Actually I tried to get the status out of the callback method "public
void onStatusChanged(String provider, int status, Bundle extras)
{ ... }". But it doesn't get called and the API is quite restraining
on exactly when it's called...

At least the status bar icon seems to know when it has a fix and when
not ...

-Jens

-- 

2. O2 APN settings

Greetings

Please excuse the novice questions. I have just received my Android
Dev Phone 1 and have inserted a data communication enabled (UK) O2 SIM
card. However, I'm having difficulties connecting to google maps and
receiving a GPS signal. I can receive a GPS signal fine with this SIM
on my Blackberry.

Do I need to create a new APN settings? If so how do I go about this?
Any advice/help is much appreciated.

Thanks

-- 

3. Transparency with 2 .jpg files

4. NetDragon... Where do your apps go?

5. versionName in layout xml

6. Has anyone gotten the EAS synth plugin to work in a DAW?

7. Problem with SSL/TLS on Android