2012-11-20 49 views
2

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

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

,但它只是似乎崩溃的应用程序我认为它适用于旧版的android。
我也曾尝试

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

如果任何人有一个想法,将不胜感激,或也许我指向一个重复如果存在我找不到一个虽然

回答

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(); 

在这个片段中,你会用装有用于此电话号码的标签的字符串的ArrayList最终结束。请注意电话号码需要非常精确的匹配,所以444-4444不会与4444444匹配,反之亦然。

个人而言,我还没有时间去尝试将“移动”或“”放在getTypeLabel中的最后一个变量之间有什么区别,尽管它看起来没有什么区别。

希望这个答案还不算晚。

相关问题