Can't guarantee this'll work for 4.0 because I haven't used it in a while but works fine on 2.3.3:
To get the contactId, I first get the user to select a contact:
public void clickSelectContact(View v) {
    Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
    startActivityForResult(i, CONTACTS_REQUEST_CODE);
}
When the user has selected a contact it comes back to this method:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == CONTACTS_REQUEST_CODE){
        if(resultCode == RESULT_OK){
             Uri uri = data.getData();
             System.out.println("uri: "+uri);
             System.out.println("PHONE NUMBER: " +  PhoneUtils.getContactPhoneNumber(this, uri.getLastPathSegment()));
        }
    }
}
Which calls my static util class:
private static final String TAG = "PhoneUtils";
public static String getContactPhoneNumber(Context context, String contactId) {
   int type = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;
   String phoneNumber = null;
   String[] whereArgs = new String[] { String.valueOf(contactId), String.valueOf(type) };
   Log.d(TAG, "Got contact id: "+contactId);
   Cursor cursor = context.getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                            null,
                            ContactsContract.CommonDataKinds.Phone._ID + " = ? and " + ContactsContract.CommonDataKinds.Phone.TYPE + " = ?", 
                            whereArgs, 
                            null);
  int phoneNumberIndex = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);
  if (cursor != null) {
       Log.d(TAG, "Returned contact count: "+cursor.getCount());
       try {
             if (cursor.moveToFirst()) {
                 phoneNumber = cursor.getString(phoneNumberIndex);
             }
            } finally {
               cursor.close();
            }
   }
  Log.d(TAG, "Returning phone number: "+phoneNumber);
  return phoneNumber;
}
Where contactId = lookupURI.getLastPathSegment();
So complex for such a simple thing! :-(
P.s. you may need this permission in your manifest:
 <uses-permission android:name="android.permission.READ_CONTACTS" />