我无法了解如何查询自定义电话号码类型。就像你进入联系人 - 编辑联系人并将其中一个电话号码更改为自定义标签一样。有没有办法让名字输入自定义类型标签?
我试过了
" android.content.res.Resources.getSystem()。getStringArray( android.R.array.phoneTypes)"
但它似乎崩溃了应用程序,我认为它是旧版本的android 我也试过
curser.getString(curser.getColumnIndex(ContactsContract.CommonDataKinds.Phone .LABEL)"
如果有人有任何想法,我会非常感激,或者如果存在的话我可能会指出一个副本,但我找不到它。
答案 0 :(得分:3)
现在我一直在做同样的事情,确保你的查询是正确的(我正在查询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的最后一个变量之间的区别,尽管它似乎还没有产生影响。 希望这个答案还不算太晚。答案 1 :(得分:0)
这是我的代码。
首先,获取类型和标签。
并使用getTypeLabel函数获取标签。
fun getPhoneNumbers(contactId: String): ArrayList<ContactNumber> {
val result = ArrayList<ContactNumber>()
/*///////////////////////////get type and custom label*/
val phoneFetchCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
arrayOf(ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.LABEL),
ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID + "=" + contactId, null, null)
while (phoneFetchCursor.moveToNext()) {
val num = phoneFetchCursor.getString(phoneFetchCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
val typ = phoneFetchCursor.getInt(phoneFetchCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE))
val label = phoneFetchCursor.getString(phoneFetchCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL))
/*///////////////////////////getTypeLabel's third parameter is custom label.
when it is null then it returns localized default label.*////////////////////////
val typName = ContactsContract.CommonDataKinds.Phone.getTypeLabel(context.resources, typ!!, label).toString()
var contactNumber = ContactNumber(contactId, num, typ,typName)
result.add(contactNumber)
}
phoneFetchCursor.close()
return result
}
答案 2 :(得分:0)
通过这种方式,您将在typeName
中获得标准或自定义标签。 (crPhones
是迭代与单个联系人关联的号码的光标):
String label = crPhones.getString(crPhones.
getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL));
int type = crPhones.getInt(crPhones.
getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
String typeName = ContactsContract.CommonDataKinds.Phone.
getTypeLabel(context.getResources(), type, label).toString();