2012-04-01 19 views
7

Tengo el número de teléfono. ¿Hay alguna manera de verificar si el número de teléfono existe en la base de datos de contactos en el dispositivo o no? Dependiendo de eso, necesito haber avanzado más en mi aplicación. Sugiera o si alguien puede tener un fragmento de código de muestra.existe contacto en los contactos

A continuación es el código que escribí:

public boolean contactExists(Activity _activity, String number) { 
    String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME }; 
    Cursor cur = _activity.getContentResolver().query(number, mPhoneNumberProjection, null, null, null); 
    try { 
     if (cur.moveToFirst()) { 
      return true; 
     } 
    } finally { 
     if (cur != null) 
      cur.close(); 
    } 
    return false; 
}// contactExists 

Gracias por adelantado ...

+0

hi @ user1306412 en mi caso esta función siempre devuelve falsa, hago lo que answeres, ¿me das alguna sugerencia? –

Respuesta

17
public boolean contactExists(Activity _activity, String number) { 
    if (number != null) { 
     Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 
     String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME }; 
     Cursor cur = _activity.getContentResolver().query(lookupUri, mPhoneNumberProjection, null, null, null); 
     try { 
      if (cur.moveToFirst()) { 
       return true; 
      } 
     } finally { 
      if (cur != null) 
       cur.close(); 
     } 
     return false; 
    } else { 
     return false; 
    } 
}// contactExists 

Excepción manejada nullpointer.

+0

heloo @Ishu mi condición siempre fue falsa, verifiqué si volvía a funcionar cierto inserto registro de lo contrario no pero todo el tiempo devuelve falso si no está duplicado entonces también –

+0

@NiravMehta - Sugiero que no vayas a copiar el código de otras personas sin tratar de entenderlo. –

+0

@Ishu - lidiar con un argumento nulo como ese es una mala idea. Es mejor dejar que la NPE suceda, y luego cuando rastrea dónde/por qué está llamando 'contactExists' con un argumento' null'. Siempre es mejor corregir el error de causa raíz que ocultarlo. –

3

Un pequeño cambio en el código :: Tienes que lookupUri ..

public boolean contactExists(Activity _activity, String number) { 
    Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 
    String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME }; 
    Cursor cur = _activity.getContentResolver().query(lookupUri, mPhoneNumberProjection, null, null, null); 
    try { 
     if (cur.moveToFirst()) { 
      return true; 
     } 
    } finally { 
     if (cur != null) 
      cur.close(); 
    } 
    return false; 
}// contactExists 
0

probé el código anterior en un dispositivo de helado (SIII) y no trabajó así que después de un poco de búsqueda Terminé la creación de este método (que está funcionando muy bien)

private boolean isContact(String incommingNumber) { 
     Cursor cursor =null; 
     String name = null; 
     try { 
      Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(incommingNumber)); 
      cursor = MainService.this.getContentResolver().query(uri, new String[] { PhoneLookup.DISPLAY_NAME }, null, null, null); 
      if (cursor != null && cursor.moveToFirst()) { 
       name = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME)); 
      } 
     } finally { 
      if(cursor!=null){ 
       cursor.close(); 
      } 
     } 
     return Util.hasValue(name); 
    } 
Cuestiones relacionadas