i went through this also. i can't find the thread for it now, but i recall that the answer was that you need to do it differently in 1.5 vs. 1.6+. having #IFDEF flashbacks? it looks like you can get the SDK version wit the Build.VERSION class.
sorry i can't point you to the code snippets. On 12/15/09 10:38 AM, Dmitri Plotnikov wrote: > 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
<<attachment: qr-gmail.png>>

