更改自定义区域设置时,手机类型的标签会更改为相应的语言。有人知道如何获得手机类型的本地化标签吗?
我在我的应用程序中选择了一个联系人以获取其电话号码,如果有多个号码,我使用AlertDialog让用户选择当前的号码。在此选择列表中,我想显示该类型的标签,因此用户更容易选择。由于它们的标签位于Android系统的某个位置,因此必须能够获得本地化标签。不幸的是,Phone.LABEL在读取电话号码时为空。
答案 0 :(得分:18)
我知道这有点老了,但是这个:
Phone.getTypeLabel(this.getResources(), cursor.getInt(typeIdx), "");
为我工作
答案 1 :(得分:1)
Inferno的回答是一个有效的答案,我很高兴找到这个答案,因为它与我想要的相似。但是,如果您正在处理安装了API Level 5(Android 2.0)或更高版本的手机,则会遇到一个小问题:android.R.array.phoneTypes
仅返回{{1}之前存在的手机类型列表从API级别5开始,class替换了ContactsContract
接口。我验证了在运行这些Android版本(API级别)的模拟器上创建新联系时列出的标签:1.6(4),2.1-update 1(7) ,和2.2(8)。
打印完毕后,Contacts
包含以下有效手机类型:
家庭,移动,工作,工作传真,家庭传真,寻呼机,其他,自定义
这些是适用于安装了Android 2.0+的手机的有效手机类型,在同一阵列中缺少这些手机:
Callback,Car,Company Main,ISDN,Main,Other Fax,Radio,Telex,TTY TDD,Work Mobile,Work Pager,Assistant,MMS
不幸的是,我找不到类似android.R.array.phoneTypes
的内容,列出所有这些适用于Android 2.0+手机的有效手机类型。有没有人遇到过这样的事情?
<强>参考强>
android.R.array.phoneTypes
已定义:http://developer.android.com/reference/android/R.array.html#phoneTypes
注意:我在另外的答案中发布了我的其他两个参考链接,因为我现在似乎无法在每个帖子上发布多个超链接。
答案 2 :(得分:1)
我正在使用这段代码
public void getPhoneType(){
int res;
for(int i=0;i<=20;i++){
res = ContactsContract.CommonDataKinds.Phone.getTypeLabelResource(i);
Log.d(TAG,"i: "+ i +" type: " + context.getString(res));
}
}
没有找到任何可以获得有效类型实际数量的地方,但是http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html#getTypeLabelResource%28int%29表示它总是会给出一个有效的res,所以你可以迭代直到它开始给出重复的值... 20后给我我是自定义资源。
答案 3 :(得分:1)
是的,您可以使用以下代码获取本地化的电话类型字符串:
int phoneNumberType = (int)pCur.getInt(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
ContactsContract.CommonDataKinds.Phone.getTypeLabel(context.getResources(), phoneNumberType , "")
但对于自定义手机类型,您应该使用cosider手机标签,而不仅仅是手机类型:
String phoneLabel = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL));