【问题标题】:get all mobile number accociated with one contact android获取与一个联系人android关联的所有手机号码
【发布时间】:2017-10-11 12:45:18
【问题描述】:

我的通讯录中添加了多个联系人,如下所示。

我想使用 ContactsContract 内容 uri 获取所有 3 个“用户”数量。 通过使用下面的代码,我只有一个联系人。

 Cursor cursorAddressBook = mContentResolver.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

    if (cursorAddressBook != null) {
        while (cursorAddressBook.moveToNext()) {

            String dataName = cursorAddressBook.getString(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String dataNumber = cursorAddressBook.getString(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            int dataType = cursorAddressBook.getInt(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA2));
            String contactId = cursorAddressBook.getString(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));

            Log.e("last updat Name last", dataName);
            Log.e("last updated No last", dataNumber);
            Log.e("last updated Type last", dataType);


        }
        cursorAddressBook.close();
    }

【问题讨论】:

    标签: android contactscontract


    【解决方案1】:

    从此blogpost 如果一个联系人有多个电话号码,那么您可以在 Android 中使用 Android 的内置类(Cursor 和 ContactsContract)检索所有电话号码和其他详细信息。并且您需要根据电话类型(例如(TYPE_MOBILE,TYPE_HOME 等))检索联系人号码

    {
        Cursor cursor = cntx.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        Integer contactsCount = cursor.getCount(); // get how many contacts you have in your contacts list 
        if (contactsCount > 0)
        {
            while(cursor.moveToNext())
            {
                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
                {
                    //the below cursor will give you details for multiple contacts
                    Cursor pCursor = cntx.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                                                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                                                    new String[]{id}, null);
                    // continue till this cursor reaches to all phone numbers which are associated with a contact in the contact list  
                    while (pCursor.moveToNext())
                     {
                          int phoneType         = pCursor.getInt(pCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                          //String isStarred        = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.STARRED));
                          String phoneNo    = pCursor.getString(pCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                          //you will get all phone numbers according to it's type as below switch case.
                          //Logs.e will print the phone number along with the name in DDMS. you can use these details where ever you want.
                          switch (phoneType)
                          {
                                case Phone.TYPE_MOBILE:
                                    Log.e(contactName + ": TYPE_MOBILE", " " + phoneNo);
                                    break;
                                case Phone.TYPE_HOME:
                                    Log.e(contactName + ": TYPE_HOME", " " + phoneNo);
                                    break;
                                case Phone.TYPE_WORK:
                                    Log.e(contactName + ": TYPE_WORK", " " + phoneNo);
                                    break;
                                case Phone.TYPE_WORK_MOBILE:
                                    Log.e(contactName + ": TYPE_WORK_MOBILE", " " + phoneNo);
                                    break;            
                                case Phone.TYPE_OTHER:
                                    Log.e(contactName + ": TYPE_OTHER", " " + phoneNo);
                                    break;
                                default:
                                    break;
                          }
                  }
                  pCursor.close();
                }
            }
            cursor.close();
        }
    }
    

    【讨论】:

      【解决方案2】:

      这是获取一个联系人的所有电话号码的代码

       String id, name;
       ContentResolver cr = getContentResolver();
       String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
       Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, sortOrder);
      
       if (cur.getCount() > 0) {
      
           while (cur.moveToNext()) {
               id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
               name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
               Log.i(tag, "Id is " + id + "\t Name is" + name);
      
               if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
      
                   Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
      
                       null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] {
                           id
                       }, null);
      
                   // this second loop will retrieve all the contact numbers for a paricular contact id 
                   while (pCur.moveToNext()) {
                       // Do something with phones
      
                       int phNumber = pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);
      
                       String phn = pCur.getString(phNumber);
      
                       Log.i("phn number", phn);
                   }
                   pCur.close();
      
               }
      
           }
      
       }
      

      【讨论】:

        猜你喜欢
        • 2011-10-30
        • 1970-01-01
        • 2012-08-27
        • 2016-12-15
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 2012-09-15
        相关资源
        最近更新 更多