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>>

Reply via email to