Pregunta

Aquí, mis nombres de contacto se muestran en la vista de lista.Al hacer clic en la lista, obtendré ContactName y Contact Id.A partir de eso, quiero fetchePhone number mediante el uso de Contact ID o Contact name, ayúdame.

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();

}

¿Fue útil?

Solución

Pruebe 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);

Otros consejos

Pruebe 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();  
}   

Encontrarás los fonenos en la tabla de datos.Encuentre las ID de contacto crudas correspondientes en la tabla RAWCONTACTS (use la ID de contacto como los criterios), use estas ID de contacto en bruto para consultar la tabla de datos.El número de Phonenen tendrá un cierto tipo MIME (lejos de los documentos ahora) para que pueda reconocerlos. Espero que esto ayude!

Consejos: Copie la base de datos Contacts2.dB de su emulador / dispositivo y use Squirrel (SQLite JDBC Driver) para meterse en la base de datos de Contactos.El DB está ubicado en / datos / datos / busque contactos en la lista).

chicos tengo la respuesta:

Utilice este código si necesita:

  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();
                }

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top