【问题标题】:How to get Specific Contact Number by using Contact Id如何使用联系人 ID 获取特定的联系电话
【发布时间】:2012-03-27 12:46:38
【问题描述】:

这里我的联系人姓名显示在列表视图中。通过单击列表,我得到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();

}

【问题讨论】:

标签: android android-contacts android-cursor


【解决方案1】:

试试这个

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

【讨论】:

  • 我不想要电话号码列表,我需要一个特定号码
  • 你检查了吗?我认为它只返回一个数字
【解决方案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();  
}   

【讨论】:

    【解决方案3】:

    您会在数据表中找到电话号码。在rawcontacts表中找到对应的rawcontact id(使用contact ID作为where条件),使用这些raw contact id查询数据表。电话号码将具有特定的 mime 类型(现在远离文档),因此您可以识别它们。 希望这会有所帮助!

    提示:从您的模拟器/设备复制contacts2.db 数据库并使用Squirrel(SQLite jdbc 驱动程序)在联系人数据库中四处寻找。 db 位于 /data/data/ 在列表中查找联系人)。

    【讨论】:

      【解决方案4】:

      各位,我得到了答案:

      如果您需要,请使用此代码:

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

      【讨论】:

        【解决方案5】:
        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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-26
          • 2012-06-09
          • 2015-12-16
          • 1970-01-01
          • 2014-03-30
          • 2012-10-25
          • 2011-07-11
          相关资源
          最近更新 更多