I found out the source(s) of the my problem related to the Accounts:

First, I had no SyncManager associated to my Account Authenticator
(and Eclair doesn't seems to like that), so I added an empty one
(after some thoughs, I think that I'll setup a more complete one in
the future). Moreover, I was using a reference to a constant as an
account type (android:label="@string/account_type"), I tried to set
this value manually and everything works smoothly
(android:label="ACCOUNT_UNIFIED_IM_TYPE").

So now, I'm just looking for some advices regarding the
ContactsContract API ! :)

--
David

On Jun 14, 11:42 am, David Bidorff <[email protected]> wrote:
> By the way, please excuse me for my bad english ;)
>
> --
> David
>
> On Jun 14, 11:40 am, David Bidorff <[email protected]> wrote:
>
>
>
> > Hi,
>
> > I'm creating my first Android application and I'm looking for a few
> > advices on several subjects. The context is simple: my application
> > connects itself to several Instant Messaging servers and it creates a
> > RawContact in the Contact Provider each one for the contacts found on
> > these servers. At this time, I got everything working, but I'm not
> > fully satisfied on several points:
>
> > First point: AccountManager
>
> > I successfully managed to create an simple account authenticator that
> > create a new account dedicated to my application. There is no real
> > authentication behind it, it simply create an empty Account if needed,
> > that's all. Everything works in an emulator v2.2, however, I can't
> > even bind to my "AuthenticatorService" in an emulator v2.1-update1.
>
> > Here is the error I retrieve from the logcat:
>
> > DEBUG/AccountManagerService(64): bind attempt failed for Session:
> > expectLaunch false, connected false, stats (0/0/0), lifetime 0.001,
> > addAccount, accountType ACCOUNT_UNIFIED_IM_TYPE, requiredFeatures null
>
> > Here is the part of the AndroidManifest.xml related to that
> > Authenticator:
>
> >         <service
> > android:name=".service.core.authenticator.AuthenticatorService"
> >                 android:exported="true">
> >                 <intent-filter>
> >                         <action 
> > android:name="android.accounts.AccountAuthenticator" />
> >                 </intent-filter>
> >                 <meta-data 
> > android:name="android.accounts.AccountAuthenticator"
> >                         android:resource="@xml/authenticator" />
> >         </service>
>
> > And here is the content of the file named '/res/xml/
> > authenticator.xml':
>
> >         <?xml version="1.0" encoding="utf-8"?>
> >         <account-authenticator 
> > xmlns:android="http://schemas.android.com/apk/
> > res/android"
> >                 android:accountType="@string/account_type"
> >                 android:icon="@drawable/unified_im_icon"
> >                 android:smallIcon="@drawable/unified_im_icon"
> >                 android:label="@string/app_name"
> >         />
>
> > Second point: creating a RawContact
>
> > Once my Account is created (or retrieved), I try to add a new
> > RawContact, but it seems to me that this process is reeeeaaaally slow,
> > so I'm wondering if I do it the right way and if you have any tips
> > that would allow my to speed it up. Here is my code:
>
> >         ContentValues lValues = new ContentValues();
> >         lValues.put(RawContacts.ACCOUNT_TYPE, lAccountType);
> >         lValues.put(RawContacts.ACCOUNT_NAME, lAccountName);
> >         Uri lRawContactUri =
> > mService.getContentResolver().insert(RawContacts.CONTENT_URI,
> > lValues);
>
> >         Uri lDataUri = Uri.withAppendedPath(lRawContactUri,
> > Data.CONTENT_DIRECTORY);
>
> >         ContentValues[] lData = new ContentValues[2];
> >         lData[0] = new ContentValues();
> >         lData[0].put(Entity.RAW_CONTACT_ID, lContact.getSystemId());
> >         lData[0].put(Entity.MIMETYPE, Im.CONTENT_ITEM_TYPE);
> >         lData[0].put(Im.PROTOCOL, 
> > ProtocolUtils.toSystemProtocol(pProtocol));
> >         lData[0].put(Im.DATA, pHandle);
>
> >         lData[1] = new ContentValues();
> >         lData[1].put(Entity.RAW_CONTACT_ID, lContact.getSystemId());
> >         lData[1].put(Entity.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
> >         lData[1].put(StructuredName.DISPLAY_NAME, pDisplayName);
>
> >         mService.getContentResolver().bulkInsert(lDataUri, lData);
>
> > (Yeah, I know, and I'm really sorry for the lack of documentation...)
>
> > Third point: reading a list of RawContacts
>
> > That's the point that  I'm not really proud of, not that the process
> > is slow, but I'm sure there is a away to make it simpler. Here is what
> > I do:
>
> > 1 - First, I query the ContactManager in order to retrieve the _ID of
> > all the RawContacts that matches my Account:
> >         Cursor lCursor = lResolver.query(
> >                 RawContacts.CONTENT_URI,
> >                 new String[] {RawContacts._ID},
> >                 RawContacts.ACCOUNT_NAME + "=? AND " + 
> > RawContacts.ACCOUNT_TYPE +
> > "=?",
> >                 new String[] {lAccountName, lAccountType},
> >                 null);
>
> > 2 - Then, for EACH RawContact I query the ContentManager in order to
> > retrieve its IM data, and an other query in order to retrieve its
> > Display Name:
>
> >         Cursor lRawCursor = lResolver.query(
> >                 lRawContactUri,
> >                 new String[] {Im.PROTOCOL, Im.DATA},
> >                 Data.MIMETYPE + "=?",
> >                 new String[] {Im.CONTENT_ITEM_TYPE},
> >                 null);
>
> >         lRawCursor = lResolver.query(
> >                 lRawContactUri,
> >                 new String[] {StructuredName.DISPLAY_NAME},
> >                 Data.MIMETYPE + "=?",
> >                 new String[]{StructuredName.CONTENT_ITEM_TYPE},
> >                 null);
>
> > So here are my main problems, I'm pretty sure that there are some tips
> > that would allow me to do the same thing more efficiently, I just hope
> > someone will be here to give me them ;)

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to