2011-11-20 32 views
5

el selector de contactos muestra todos los contactos se realiza esta Linke (como se dice muchas veces aquí en SO):problemas recogiendo un contacto con el número de teléfono y que la lectura de los números de teléfono de llamada

Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); 
startActivityForResult(intent, REQ_CODE); 

Me estoy poniendo el contacto nombre y todos sus números de teléfono en onActivityResult con el siguiente fragmento:

public void onActivityResult(int requestCode, int resultCode, Intent intent) 
{ 
    Uri contactUri = intent.getData(); 
    ContentResolver resolver = getContentResolver(); 
    long contactId = -1; 

    // get display name from the contact 
    Cursor cursor = resolver.query(contactUri, 
            new String[] { Contacts._ID, Contacts.DISPLAY_NAME }, 
            null, null, null); 
    if(cursor.moveToFirst()) 
    { 
     contactId = cursor.getLong(0); 
     Log.i("tag", "ContactID = " + Long.toString(contactId)); 
     Log.i("tag", "DisplayName = " + cursor.getString(1)); 
    } 

    // get all phone numbers with type from the contact 
    cursor = resolver.query(Phone.CONTENT_URI, 
          new String[] { Phone.TYPE, Phone.NUMBER }, 
          Phone.CONTACT_ID + "=" + contactId, null, null); 
    while(cursor.moveToNext()) 
    { 
     Log.i("tag", "PhoneNumber = T:" + Integer.toString(cursor.getInt(0)) + "/N:" + cursor.getString(1)); 
    } 

Llamando al selector de contactos y mostrar sólo los contactos con un número de teléfono se pueden hacer así (también encontraron en SO):

Intent intent = new Intent(Intent.ACTION_PICK); 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(intent, REQ_CODE); 

Si lo hago, solo veo aquellos contactos en el selector de contactos que tienen al menos un número de teléfono, que es exactamente lo que necesito. Lamentablemente, con el fragmento de código anterior solo obtengo el nombre para mostrar pero NO más números de teléfono.

¿Alguien tiene una idea de lo que tengo que cambiar para obtener los números de teléfono?

Gracias de antemano

Respuesta

2

Cambiar el Phone.Contact_Id en la clausula donde para Phone._ID como esto:

cursor = resolver.query(Phone.CONTENT_URI, 
          new String[] { Phone.TYPE, Phone.NUMBER }, 
          Phone._ID + "=" + contactId, null, null); 
    while(cursor.moveToNext()) 
    { 
     Log.i("tag", "PhoneNumber = T:" + Integer.toString(cursor.getInt(0)) + "/N:" + cursor.getString(1)); 
    } 

Más detalles en este question.

Espero que ayude :)

+0

Gracias por su respuesta Jordi. El problema real es la primera consulta en el método onActivityResult de mi pregunta: Devuelve la ID del Contacto o Teléfono, dependiendo de si configuro o no el tipo en el Intento con 'intent.setType (..)'. Y como necesito ambas formas de leer un contacto (usando el selector de contactos con el filtro del teléfono o sin él), tendré que leer Contact._ID y DisplayName en la primera consulta, dependiendo de eso. Pero su respuesta ayuda ... Gracias de nuevo. – infero

Cuestiones relacionadas