仅获取联系人手机号码

2024-04-08

关于使用联系人 API 获取联系人号码有几个问题,但我想知道是否有一种方法可以识别检索到的号码是手机号码。

以下代码通常显示为获取联系人电话号码的一种方式,因为它获取一个或多个电话号码的列表:

String[] projection = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER};
    String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1";

    Cursor cursor = null;
    Cursor phones = null;
    try
    {
        cursor =  managedQuery(intent.getData(), projection, selection, null, null);
        while (cursor.moveToNext()) 
        {           
            String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));

            phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
            while (phones.moveToNext()) 
            {               
                String pdata = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));
                Log.v("DATA",pdata);
            }                           
       }  
    }
    catch (NullPointerException npe)
    {
        Log.e(TAG, "Error trying to get Contacts.");
    }
    finally
    {
        if (phones != null)
        {
            phones.close();
        }
        if (cursor != null)
        {
            cursor.close();
        }           
    } 

虽然这工作正常,但有什么方法可以轻松识别电话号码是移动类型(除了尝试与正则表达式进行模式匹配之外)。

我怀疑一定有相关的数据,以便本机应用程序可以对电话号码进行分类 - 如下图所示:


我偶然发现了一篇博客文章,其中很好地解释了如何使用 ContactsContract apihere http://app-solut.com/blog/2011/03/working-with-the-contactscontract-to-query-contacts-in-android/.

因此,在上面的示例中,我将上面的部分代码更改为:

while (phones.moveToNext()) 
{                   
     int phoneType = phones.getInt(phones.getColumnIndex(Phone.TYPE));
     if (phoneType == Phone.TYPE_MOBILE)
     {
          phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));
          phoneNumber = phoneNumber.replaceAll("\\s", "");
          break;
     }
}

这会循环单个联系人的所有电话,如果类型为 Phone.TYPE_MOBILE,则采用此电话。

希望这可以帮助遇到与我相同问题的人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅获取联系人手机号码 的相关文章

随机推荐