obtener el nombre del contacto de los contactos en Android

Tengo problemas para obtener el nombre de contacto de los contactos. Estoy haciendo una aplicación de SMS y como sabes, cuando recibes un SMS el número que recibes viene con el código de país, pero si tienes el mismo número guardado en tu memoria sin el código de país, ¿cómo lo encontrarías?

Puedo obtener el número si está guardado con el código de país, pero no puedo si está guardado sin el código de país.

Aquí está mi código:

String[] projection = new String[] {
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER };

    // encode the phone number and build the filter URI
    Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(number));

    // query time
    Cursor c = getContentResolver().query(contactUri, projection, null,
            null, null);

    // if the query returns 1 or more results
    // return the first result
    if (c.moveToFirst()) {
        String name = c.getString(c
                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        return name;
    }

    // return the original number if no match was found
    return number;

preguntado el 08 de noviembre de 11 a las 15:11

1 Respuestas

Deberías intentar usar SQLite como en su selección. No he probado esto, pero entenderás la idea. El método acepta el número (dirección) de SMS e intenta asignarlo al número de Phone.NUMBER.

  private void whateverYouCallMe(String numberWithCode) {

  String[] projection = new String[] {
        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Phone.NUMBER };

  String selection = Phone.NUMBER + " LIKE '%?%'" // numberWithCode should supplement the ? 
  final String[] SELECTION_ARGS = { numberWithCode };

  Cursor c = getContentResolver().query(contactUri, projection, selection, SELECTION_ARGS, null);

  //etc
  }

respondido 12 nov., 11:19

Intenté esto pero todavía no hay resultados. ¿Debo usar una consulta con opertaor? número de consulta con código y sin código? .. - sajjoo

maldita sea, olvidé agregar los argumentos de selección. Agregado ahora - hovanessyan

Ahora me está cayendo debido a este argumento de selección. no ha especificado la declaración de ContactURI. agregué este Uri contactUri = Uri.withAppendedPath (ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode (número)); y el error que recibo es: enlace o índice de columna fuera de rango. - sajjoo

Creo que necesitas usar ContactsContract.CommonDataKinds.Phone.CONTENT_URI - hovanessyan

consiguió que la respuesta funcionara cambiando la cadena a "LIKE?" en lugar de "LIKE '%?%'" - inthy

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.