Please be more specific: we all know there were some issues with the 2.0 SDK, which is why we released the 2.0.1 version of the SDK. So the real question is: does your code work on real Droids? It's expected to. However! Using the People.CONTENT_URI on a 2.0 phone is a really bad idea: that URI can only see one Google account and nothing else, so your app will be broken on 2.* phones with multiple accounts and those with corporate accounts.
Cheers, - Dmitri On Tue, Dec 15, 2009 at 1:29 AM, agirardello <[email protected]> wrote: > I'm still facing a problem by simply accessing the phone's contacts! > > The following works on all API levels (1 to 6) apart 5 (which is > Android 2.0): > > getContentResolver().query(People.CONTENT_URI, null, null, null, > People.DISPLAY_NAME); > > Any suggestion to let it work on API level 5? > > Best, > > Andrea > > > > > On Dec 7, 7:40 pm, Dmitri Plotnikov <[email protected]> wrote: >> Take a look at this sample app that makes use of both old and new APIs: >> >> http://code.google.com/p/android-business-card/source/browse/#svn/tru... >> >> In the redesign of the Contacts API we had several goals: add support >> for multiple types of accounts, add support for multiple accounts, add >> support for account-specific data types, etc. These goals were >> incompatible with the overall structure of the old APIs, so we had to >> redisign them from scratch. This was a major step, sort-of like going >> from English measurement units to metric system or going from a manual >> transmission car to automatic. This type of change is supposed to be >> a rare event, painful for everyone, but ultimately the platform to a >> whole new level. >> >> Cheers, >> - Dmitri >> >> On Mon, Dec 7, 2009 at 8:12 AM, agirardello <[email protected]> >> wrote: >> > Sorry for being away... >> >> > I managed to get it to work, however I complain with the approach used >> > in developing the API! Apparently, searching for a contact based on >> > the phone number has changed in Android 2.0 and the "old good way" of >> > doing that isn't working anymore (Why????????). I agree that now it is >> > much more intuitive, however it is a mess for the compatibility >> > (unless I was doing it wrong in API level 3 and 4, any lines of code >> > to share?). >> >> > Here the code for API level >= 5: >> >> > Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, >> > Uri.encode(number)); >> > Cursor c = context.getContentResolver().query(lookupUri, null, null, >> > null, null); >> > if (c.getCount() > 0) { >> > c.moveToFirst(); >> > return c.getString(c.getColumnIndex( PhoneLookup.DISPLAY_NAME )); >> > } else { >> > // Not found, do something else... >> > } >> >> > In any case, to be compatible with API level <= 4 PhoneLookup cannot >> > be referenced in the code (as well as other things) and must be loaded >> > through reflection. Am I wrong? Other solution? >> >> > Looking forward to hear something from a more experienced Android >> > developer... >> >> > Best, >> >> > Andrea ;-) >> >> > On Dec 5, 5:36 pm, ghassett <[email protected]> wrote: >> >> Yes Dmitri, this is exactly what I am doing -- I am not manually >> >> inserting records into thecontactsdb like the test case does, but >> >> there is definitely a contact with a mobile phone number >> >> "617939xxxx" (with real digits, not "x"s), and when I open a cursor on >> >> the query: >> >> >> Uri filterUri1 = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, >> >> "617939xxxx"); // with real digits, not "x"s >> >> >> I get back a valid cursor, but no rows (moveToFirst() returns false) >> >> -- on 2.0 emulator only. On 1.6 emulator, it works fine. >> >> >> // greg // >> >> >> On Dec 4, 7:21 pm, Dmitri Plotnikov <[email protected]> wrote: >> >> >> > Hi Greg, >> >> >> > Take a look at the testPhonesFilterQuery unit test we have for >> >> > verifying the behavior in question: >> >> >> >http://android.git.kernel.org/?p=platform/packages/providers/Contacts... >> >> >> > Is what it's doing correct? Is it different from what you are doing? >> >> >> > Thank you, >> >> > - Dmitri >> >> >> > On Fri, Dec 4, 2009 at 4:00 PM, ghassett <[email protected]> wrote: >> >> > > Hi Dmitri -- I am not sure that the old API is still functional. I am >> >> > > using what I think is the standard way of getting a display name from >> >> > > a phone number -- see the code below -- and it functions on a 1.6 >> >> > > emulator but on on a 2.0 emulator. Am I doing something wrong? Is >> >> > > there an example somewhere of how to "get a contact name from a phone >> >> > > number" that will function in 1.5, 1.6, and 2.0? >> >> >> > > Here's the code -- it works when run in the 1.6 emulator, but not in >> >> > > the 2.0 emulator (Cursor comes back non-null, but there are no records >> >> > > so moveToFirst returns false): >> >> >> > > public String getDisplayName (ContentResolver contentResolver) >> >> > > { >> >> > > String retval = mPhoneNumber; >> >> >> > > Cursor cursor = contentResolver.query( >> >> > > Uri.withAppendedPath >> >> > > (Contacts.Phones.CONTENT_FILTER_URL, >> >> > > Uri.encode(mPhoneNumber)), >> >> > > new String[] >> >> > > {Contacts.Phones.DISPLAY_NAME }, >> >> > > null, null, null); >> >> >> > > if (cursor != null && cursor.moveToFirst()) >> >> > > { >> >> > > retval = cursor.getString(0); >> >> > > } >> >> >> > > return retval; >> >> > > } >> >> >> > > // thanks // greg // >> >> >> > > On Oct 30, 3:05 pm, Dmitri Plotnikov <[email protected]> wrote: >> >> > >> It's deprecated, not removed. The old API is still functional, but >> >> > >> with >> >> > >> restrictions: >> >> >> > >> 1. If your app was using something non-public, that part is likely >> >> > >> to break. >> >> > >> We tested a bunch of apps on the market against the legacy API - >> >> > >> most >> >> > >> worked, but some did not. Those were the cases when the app was >> >> > >> using some >> >> > >> knowledge of the undocumented underlying database structure. >> >> > >> 2. Legacy API will only give you access to the "primary" account, >> >> > >> i.e. the >> >> > >> first Google account you add to the phone. >> >> >> > >> - Dmitri >> >> >> > >> On Fri, Oct 30, 2009 at 11:40 AM, nEx.Software >> >> > >> <[email protected] >> >> >> > >> > wrote: >> >> >> > >> > Hold up... I'm confused. Are you saying thatContactsportion of the >> >> > >> > SDK is deprecated? Whatever happened to "stick to the SDK because >> >> > >> > those are stable apis that won't break in future versions"? Very >> >> > >> > disappointing... >> >> >> > >> > On Oct 30, 11:12 am, Jeff Sharkey <[email protected]> wrote: >> >> > >> > > Could you post the exact Uri you're passing to query()? As the >> >> > >> > > javadoc describes, you need to append a filter string to the >> >> > >> > > CONTENT_FILTER_URI so it knows what to filter on. >> >> >> > >> > > Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_URI, >> >> > >> > phoneNumber); >> >> >> > >> > > Also, you might be able to skip your second step, since you can >> >> > >> > > directly ask for the PhoneLookup.DISPLAY_NAME column in the >> >> > >> > > projection. >> >> >> > >> > > j >> >> >> > >> > > On Fri, Oct 30, 2009 at 8:05 AM, agirardello >> >> >> > >> > > <[email protected]> wrote: >> >> >> > >> > > > Dear all, >> >> >> > >> > > > I'm trying to adapt my application (Personalytics) for the >> >> > >> > > > brand new >> >> > >> > > > Android 2.0, however I'm facing an issue while >> >> > >> > > > accessingcontacts' >> >> > >> > > > phone numbers... >> >> >> > >> > > > What I need to do is to retrieve the name associated to a >> >> > >> > > > stored >> >> > >> > > > contact based on his/her phone number. At present I'm doing >> >> > >> > > > this in >> >> > >> > > > two steps: >> >> > >> > > > 1) from a phone number I get the corresponding ID of the stored >> >> > >> > > > contact (if present) >> >> > >> > > > 2) I retrieve the contact's name based on that ID >> >> >> > >> > > > I managed to use the correct CONTENT_URI for readingcontactsby >> >> > >> > > > using >> >> > >> > > > reflection to be fully compatible with Android 2.0 >> >> > >> > > > (ContactsContract.Contacts.CONTENT_URI) and the previous >> >> > >> > > > versions >> >> > >> > > > (People.CONTENT_URI). >> >> >> > >> > > > Now I'm trying to do the same for Phones.CONTENT_URI (Android >> >> > >> > > > <= 1.6) >> >> > >> > > > and ContactsContract.PhoneLookup.CONTENT_FILTER_URI (Android = >> >> > >> > > > 2.0) >> >> > >> > > > which is needed by step 2) mentioned above. But as soon as I >> >> > >> > > > try to >> >> > >> > > > get a contentResolver by using >> >> > >> > > > ContactsContract.PhoneLookup.CONTENT_FILTER_URI I get the >> >> > >> > > > following >> >> > >> > > > exception: >> >> >> > >> > > > java.lang.IllegalArgumentException: Unknown URL >> >> > >> > content://com.android.contacts/phone_lookup >> >> >> > >> > > > This looks really strange to me, since it should be correct >> >> > >> > > > (it is >> >> > >> > > > part of the official API)! Moreover, I tried to look at the >> >> > >> > > > "API >> >> > >> > > > Demos" project, in particular to the classes: >> >> >> > >> > > > com.example.android.apis.view.List2 >> >> > >> > > > com.example.android.apis.view.List3 >> >> >> > >> > > > which are still using the deprecated People.CONTENT_URI and >> >> > >> > > > Phones.CONTENT_URI and thus no data (i.e.contacts) is loaded >> >> > >> > > > (of >> >> > >> > > > course I have samplecontactsin the emulator). >> >> >> > >> > > > - Do you have any suggestion to solve this problem? >> >> > >> > > > - Or is there another approach I can use to get the name of a >> >> > >> > > > contact >> >> > >> > > > based on one of his/her numbers? (This must work on all >> >> > >> > > > versions of >> >> > >> > > > Android) >> >> >> > >> > > > Thank you!!!!!!!! ;-) >> >> >> > >> > > > Andrea >> >> >> > >> > > -- >> >> > >> > > Jeff Sharkey >> >> > >> > > [email protected] >> >> > >> > --~--~---------~--~----~------------~-------~--~----~ >> >> > >> > 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]<android-developers%[email protected]> >> >> > >> > For more options, visit this group at >> >> > >> >http://groups.google.com/group/android-developers?hl=en >> >> > >> > -~----------~----~----~----~------~----~------~--~--- >> >> >> > > -- >> >> > > 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 >> >> > -- >> > You received this >> >> ... >> >> read more » > > -- > 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 > -- 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

