2012-03-10 69 views
8

這裏我聯繫名字得到具體的聯繫電話號碼顯示在列表視圖。通過點擊列表我得到ContactNameContact Id。從我希望通過使用Contact IDContact name獲取Phone number,請幫助我。如何使用聯繫人標識

這裏是我的代碼

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

看這裏http://stackoverflow.com/questions/3370628/retrieve-contact-phone-number-from-uri-in-android – 2012-03-10 07:29:31

+0

我使用上述鏈接,但phoneindex產生o值 – user933909 2012-03-10 08:12:26

+0

http://stackoverflow.com /questions/3044545/get-contact-info-from-android-contact-picker.Please嘗試搜索SO.Such的問題已經問,你必須安排它 – 2012-03-10 08:17:31

回答

18

試試這個

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

我不想要電話列表號碼我需要一個特定號碼 – user933909 2012-03-10 08:13:12

+0

你有檢查嗎?我認爲它只返回一個數字 – Dhaval 2012-03-10 08:29:19

0

你會發現在數據表中的PHONENUMBERS。在rawcontacts表中找到相應的原始聯繫人id(使用聯繫人ID作爲where條件),使用這些原始聯繫人id查詢數據表。電話號碼將有一個特定的MIME類型(現在遠離文檔),以便您可以識別它們。 希望這有助於!

提示:從模擬器/設備複製contacts2.db數據庫,並使用Squirrel(SQLite jdbc驅動程序)在聯繫人數據庫中查找。數據庫位於/ data/data /查找列表中的聯繫人)。

+0

請提供一些代碼 – user933909 2012-03-10 08:12:42

0

傢伙,我得到了答案:

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

試試這個

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

,如果你需要,請使用此代碼0

相關問題