现在我一直在做同样的事情,在确保你的查询是正确的(我正在查询 ContactsContract.CommonDataKinds.Phone.CONTENT_URI)(确保你的投影是正确的等)之后,你可以做类似下面的事情,我猜您面临的困难是选择预设标签与自定义标签。预设标签在 TYPE 列中表示为整数,而如果 TYPE == TYPE_CUSTOM,则 LABEL 字段将包含您要查找的数据。
从 TYPE 中的数字移动到字符串是使用提供的方法。我不确定本地化,但我认为已经处理了。
Cursor curse = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.LABEL},
ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?", new String[]{numnum}, null);
int colIndex = curse.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
int lblIndex = curse.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL);
ArrayList<String> numbers = new ArrayList<String>();
String cur = "";
while(curse.moveToNext())
{
int labelType = curse.getInt(colIndex);
if(labelType == ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM)
{
cur = curse.getString(lblIndex);
}
else
{
CharSequence seq = ContactsContract.CommonDataKinds.Phone.getTypeLabel(mContext.getResources(), labelType, "Mobile");
cur = seq.toString();
}
numbers.add(cur);
}
curse.close();
在此代码段的末尾,您将得到一个字符串数组列表,其中填充了用于此电话号码的标签。请注意,电话号码需要非常精确地匹配,因此 444-4444 不会与 4444444 匹配,反之亦然。
就个人而言,我还没有时间尝试将“Mobile”或“”放在 getTypeLabel 的最后一个变量上之间的区别,尽管它似乎还没有产生任何影响。
希望这个答案还不算太晚。