2012-03-10 8 views
8

Tutaj moje nazwy kontaktów są wyświetlane w widoku listy. Klikając listę otrzymuję ContactName i Contact Id. Z tego chcę pobrać Phone number przy użyciu albo Contact ID lub Contact name, Proszę mi pomóc.Jak uzyskać konkretny numer kontaktowy za pomocą identyfikatora kontaktu

Oto mój kod

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

zobacz tutaj http://stackoverflow.com/questions/3370628/retrieve-contact-phone-number-from-uri-in-android –

+0

Użyłem powyższego linku, ale phoneindex produkuje o wartości – user933909

+0

http://stackoverflow.com /questions/3044545/get-contact-info-from-android-contact-picker. Spróbuj wyszukać na SO.Takie pytania już zadawały i musisz je po prostu ustawić –

Odpowiedz

18

próbować ten jeden

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

Nie chcę listy telefonów numer potrzebuję określonego numeru – user933909

+0

Czy sprawdziłeś? Myślę, że zwraca tylko jeden numer – Dhaval

0

Znajdziesz phonenumbers w tabeli danych. Znajdź odpowiednie nieprzetworzone identyfikatory kontaktu w tabeli rawcontacts (użyj identyfikatora kontaktu jako kryterium), użyj tych nieprzetworzonych identyfikatorów kontaktu, aby przesłać zapytanie do tabeli danych. Numer telefonu będzie miał określony typ MIME (z dala od dokumentów teraz), abyś mógł je rozpoznać. Mam nadzieję, że to pomoże!

Wskazówki: skopiuj bazę danych contacts2.db z emulatora/urządzenia i użyj Squirrel (sterownik jdbc SQLite), aby przeglądać bazę danych kontaktów. Baza danych znajduje się w katalogu/data/data/look dla kontaktów na liście).

+0

proszę podać kod – user933909

0

Guys Dostałem odpowiedź:

Proszę użyć tego kodu, jeśli potrzebujesz:

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

Spróbuj jeden

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(); 
} 
Powiązane problemy