2010-08-24 10 views
6

Al cambiar la configuración regional personalizada, la etiqueta de los tipos de teléfono cambia al idioma correspondiente. ¿Alguien sabe cómo obtener la etiqueta localizada de los tipos de teléfono?cómo obtener la etiqueta localizada de los tipos de teléfono?

Escojo un contacto en mi aplicación para obtener su número de teléfono y si hay más de un número, utilizo un AlertDialog para permitir que el usuario seleccione el correcto. En esta lista de selección, quiero mostrar la etiqueta del tipo, por lo que es más fácil para el usuario seleccionar. Como las etiquetas están en algún lugar del sistema Android, debe ser posible obtener la etiqueta localizada. Desafortunadamente, Phone.LABEL es nulo cuando lee el número de teléfono.

+1

Quaerite, et invenietis : Cadena [] s = android.content.res.Resources.getSystem() .getStringArray (android.R.array.phoneTypes); – infero

Respuesta

17

Sé que esto es un poco viejo, pero esto:

Phone.getTypeLabel(this.getResources(), cursor.getInt(typeIdx), ""); 

trabajado para mí

+0

Esto funcionó para mí también. – Maurice

+0

Esto también me funciona. – PhatHV

+0

lamentablemente no para etiquetas personalizadas. –

1

La respuesta de Inferno es una respuesta válida, y estuve feliz de encontrar esta respuesta porque era similar a lo que estaba buscando. Sin embargo, si está tratando con teléfonos instalados con API Level 5 (Android 2.0) o posterior, hay un pequeño problema con esto: android.R.array.phoneTypes solo devuelve la lista de tipos de teléfono que estaban presentes antes de que la clase ContactsContract reemplazara la interfaz Contacts como del nivel 5 de API. Comprobé las etiquetas enumeradas al crear un nuevo contacto en emuladores que ejecutan estas versiones de Android (niveles de API): 1.6 (4), 2.1-actualización 1 (7) y 2.2 (8).

Cuando se imprime, android.R.array.phoneTypes contiene estos tipos válidos de teléfono:
Casa, Móvil, Trabajo, Fax laboral, Fax personal, Localizador, Otros, Custom

Estos son los tipos de teléfono válido, presentes para teléfonos con Android 2.0+ instalado, que faltan en esa misma matriz:
de devolución de llamada, de coches, de la empresa principal, RDSI, principal, Otro fax, radio, télex, TTY TDD, trabajo móvil, trabajo Pager, Asistente, MMS

Lamentablemente, yo h ave no ha podido encontrar algo como android.R.array.phoneTypes que enumerará todos estos tipos de teléfonos válidos para teléfonos Android 2.0+. ¿Alguien ha encontrado esto todavía?

Referencias

android.R.array.phoneTypes definen: http://developer.android.com/reference/android/R.array.html#phoneTypes

Nota: Estoy poniendo mis otros dos enlaces de referencia en las respuestas por separado, ya que parece que no puede publicar más de un hipervínculo por mensaje en esta vez.

+0

Tipos de teléfono válidos anteriores a Android 2.0 (pre-'ContactsContract'): http://developer.android.com/reference/android/provider/Contacts.PhonesColumns.html –

+0

Tipos de teléfono válidos para Android 2.0+: http: // developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html –

1

estoy usando esta pieza de código

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

no fundó ningún lugar para obtener el recuento real de los tipos válidos, pero http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html#getTypeLabelResource%28int%29 dice que siempre dará una res válida, por lo que puede repetir hasta que comience a dar valores repetidos ... a mí después de 20 me da las res personalizado.

1

Sí, puede obtener localizada cadena de tipo de teléfono con el código:

int phoneNumberType = (int)pCur.getInt(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 
ContactsContract.CommonDataKinds.Phone.getTypeLabel(context.getResources(), phoneNumberType , "") 

pero para este tipo de encargo del teléfono debe cosider etiqueta del teléfono, no sólo tipo de teléfono:

String phoneLabel = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL)); 
+0

Respuesta perfecta. Sucinta y precisa. Gracias. –

Cuestiones relacionadas