2

我无法找出如何查询自定义电话号码类型。就像您进入联系人编辑联系人并将其中一个电话号码更改为自定义标签一样。有没有办法将名称输入到自定义类型标签中?
我努力了

“android.content.res.Resources.getSystem().getStringArray(android.R.array.phoneTypes)”

但它似乎只是让应用程序崩溃,我认为它适用于旧版本的 android。
而且我也试过

cursor.getString(curser.getColumnIndex(ContactsContract.CommonDataKinds.Phone .LABEL)”。

如果有人有一个想法,将不胜感激,或者如果存在一个副本,我可能会指出我找不到一个。

4

3 回答 3

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 的最后一个变量上之间的区别,尽管它似乎还没有产生任何影响。

希望这个答案还不算太晚。

于 2013-02-14T10:44:05.157 回答
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
    }
于 2018-09-08T16:54:53.647 回答
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();
于 2019-12-01T16:55:43.660 回答