2012-03-10 23 views
8

Aquí mis nombres de contacto se muestran en la vista de lista. Al hacer clic en la lista obtengo ContactName y Contact Id. De eso quiero buscar Phone number usando Contact ID o Contact name, por favor, ayúdenme.Cómo obtener un número de contacto específico usando la Id. De contacto

Aquí está mi código

void ReadContacts(String sort) { 
    final Uri uri = ContactsContract.Contacts.CONTENT_URI; 
    final String[] projection = new String[] { 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME 
    }; 
    //boolean mShowInvisible = false; 
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'"; 
    String[] selectionArgs = null; 
    final String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 

    m_curContacts = managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
    String[] fields = new String[] {ContactsContract.Data.DISPLAY_NAME}; 
    m_slvAdapter = new SimpleCursorAdapter(this, 
       android.R.layout.simple_list_item_1, 
       m_curContacts, 
       fields, 
       new int[] {android.R.id.text1}); 
    m_slvAdapter.setFilterQueryProvider(new FilterQueryProvider() { 

     public Cursor runQuery(CharSequence constraint) { 
      Log.d(LOG_TAG, "runQuery constraint:"+constraint); 
      String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'" + 
        " AND "+ ContactsContract.Contacts.DISPLAY_NAME + " LIKE '%"+constraint+"%'"; 
      String[] selectionArgs = null;//new String[]{"'1'"};//, }; 
      Cursor cur = managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
      return cur; 
     } 

    }); 
    m_lvContacts.setAdapter(m_slvAdapter); 
    // cur.close(); 

} 



public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { 
    ContentResolver cr; 
    Cursor cursor = (Cursor) m_lvContacts.getItemAtPosition(position); 
    String szDisplayName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
    String szId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 
    int nId = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 
    Log.d(LOG_TAG, "Item click:"+position+" szId:"+szId+" nId:"+nId+" Data:"+szDisplayName); 
    Toast.makeText(getBaseContext(), "Item click:"+phoneNumber+" szId:"+szId+" nId:"+nId+" Data:"+szDisplayName, Toast.LENGTH_SHORT).show(); 

} 
+0

mira aquí http://stackoverflow.com/questions/3370628/retrieve-contact-phone-number-from-uri-in-android –

+0

utilicé el enlace de arriba pero el índice de teléfono produce o valor – user933909

+0

http://stackoverflow.com /questions/3044545/get-contact-info-from-android-contact-picker.Por favor, intente buscar en SO.Tales preguntas ya han pedido y solo tiene que arreglarlo –

Respuesta

18

prueba este

ArrayList<String> phones = new ArrayList<String>(); 

Cursor cursor = mContentResolver.query(
     CommonDataKinds.Phone.CONTENT_URI, 
     null, 
     CommonDataKinds.Phone.CONTACT_ID +" = ?", 
     new String[]{id}, null); 

while (cursor.moveToNext()) 
{ 
    phones.add(cursor.getString(cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER))); 
} 

cursor.close(); 
return(phones); 
+0

No quiero la lista de teléfono número necesito un número en particular – user933909

+0

¿Lo ha comprobado? Creo que devuelve solo un número – Dhaval

0

Encontrará los números telefónicos en la tabla de datos. Encuentre los identificadores de contacto sin procesar correspondientes en la tabla de contactos sin formato (use ID de contacto como criterio de búsqueda), use estos identificadores de contacto sin formato para consultar la tabla de datos. El número de teléfono tendrá un cierto tipo de mimo (lejos de los documentos ahora) para que pueda reconocerlos. Espero que esto ayude!

Sugerencias: copie la base de datos contacts2.db de su emulador/dispositivo y use Squirrel (controlador SQLite jdbc) para hurgar en la base de datos de contactos. El db se encuentra en/data/data/busca contactos en la lista).

+0

proporcione un código – user933909

0

chicos me dio la respuesta:

por favor utilice este código si es necesario:

Cursor cursor = (Cursor) m_lvContacts.getItemAtPosition(position); 
     String szDisplayName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
     String szId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 
     int nId = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 
     long l = Long.parseLong(szId); 
     int type=ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE; 




cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"='"+szId+"'", 
     null, null); 

      int phoneNumberIndex = cursor 
        .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER); 

      Log.d(TAG, String.valueOf(cursor.getCount())); 

      if (cursor != null) { 
       Log.v(TAG, "Cursor Not null"); 
       try { 
        if (cursor.moveToNext()) { 
         Log.v(TAG, "Moved to first"); 
         Log.v(TAG, "Cursor Moved to first and checking"); 
         phoneNumber = cursor.getString(phoneNumberIndex); 
         System.out.println("HAGSd"+phoneNumber); 
        } 
       } finally { 
        Log.v(TAG, "In finally"); 
        cursor.close(); 
       } 
0
public static final String contactIdByPhoneNumber(Context ctx, String phoneNumber) { 
    String contactId = null; 
    if (phoneNumber != null && phoneNumber.length() > 0) { 
     ContentResolver contentResolver = ctx.getContentResolver(); 

     Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); 

     String[] projection = new String[] { PhoneLookup._ID }; 

     Cursor cursor = contentResolver.query(uri, projection, null, null, null); 

     if (cursor != null) { 
      while (cursor.moveToNext()) { 
       contactId = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID)); 
      } 
      cursor.close(); 
     } 
    } 
    return contactId; 
} 
2

prueba este

public void getNameUsingContactId(String contactId){ 

    String cContactIdString = ContactsContract.Contacts._ID; 
    Uri cCONTACT_CONTENT_URI = ContactsContract.Contacts.CONTENT_URI; 
    String cDisplayNameColumn = ContactsContract.Contacts.DISPLAY_NAME; 

    String selection = cContactIdString + " = ? "; 
    String[] selectionArgs = new String[]{String.valueOf(contactId)}; 

    Cursor cursor = mContext.getContentResolver().query(cCONTACT_CONTENT_URI, null, selection, selectionArgs, null); 
    if ((cursor != null) && (cursor.getCount() > 0)) { 
     cursor.moveToFirst(); 
     while ((cursor != null) && (cursor.isAfterLast() == false)) { 
      if (cursor.getColumnIndex(cContactIdString) >= 0) { 
       if (contactId.equals(cursor.getString(cursor.getColumnIndex(cContactIdString)))) { 
        String name = cursor.getString(cursor.getColumnIndex(cDisplayNameColumn)); 
        break; 
       } 
      } 
      cursor.moveToNext(); 
     } 
    } 
    if (cursor != null) 
     cursor.close(); 
} 
Cuestiones relacionadas