Obtenga el formato E 164 de contactos en la API de Android menos de 16
Recupero la lista de números de contacto del teléfono con el siguiente código:
Cursor c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); while(c.moveToNext()){ Log.d(TAG,"NO.: "+ c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER))); }
En API 16 y superior, esto funcionaría perfectamente para mí, como quiero que todos los contactos formateados en el formato E 164, no importa cómo son almacenados por el usuario.
- ¿Diferencia entre términos android?
- Cómo mostrar personalizado tipo contacto dentro de Contacto como WhatsApp android
- Obtener el nombre y el apellido de un contacto en lugar de un solo nombre para mostrar?
- Obtener contactos de Android con funcionalidad de tipo a filtro, restringida a una cuenta específica
- Android API 8, 10 ContactsContract.Data.HAS_PHONE_NUMBER ninguna columna
-
Sin embargo, para APIs por debajo de 16, el código anterior no funcionará y no puedo obtener el formato E 164 para todos los contactos mediante la línea siguiente:
c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
La clase 'PhoneNumberUtils' no pudo ser utilizada.
Además, no puedo usar la biblioteca libphonenumber para convertir números a su formato E 164, ya que no conozco la ISO 3166-1 código de país de dos letras de los contactos.
¿Existe alguna manera en la que puedo obtener el ISO-3166-1 código de país de dos letras para cada contacto en Android, para que pueda usar la biblioteca libphonenumber?
¿O hay alguna otra solución para lograr el punto 1.?
Los números recuperados desde el teléfono pueden ser de cualquier formato, por ejemplo.
- Local: 965XXXXXXX
- Nacional: 0965XXXXXXX
- Internacional: +91 96 5X XXXXXX
- y otra
Mientras que el E 164 es + 91XXXXXXXXXX donde 91 es el código del país.
Cualquier ayuda sería muy apreciada!
- ¿Cómo obtener contactos con los que el usuario habla a menudo?
- Cómo crear un contacto programáticamente
- Visualización de contactos sólo con números de teléfono utilizando la intención ACTION_PICK en el dispositivo Android
- ContentObserver para actualización de contacto manualmente
- ¿Por qué se censuran algunos contactos de las aplicaciones de Android?
- Foto de contacto de Android: Cómo volver a (Google) foto de contacto de la web (y así, 'cancelar' un cambio de imagen local anterior)
- Crear grupo de contactos invisibles en Android
- Editar nombre / número de teléfono de contacto programáticamente
Puede utilizar el idioma de red para el código de país predeterminado, disponible mediante getNetworkCountryIso
. Este método puede no ser confiable en las redes CDMA (use getPhoneType
para determinar si en una red CDMA).
Será el mismo valor utilizado al llamar al contacto, por lo que debe obtener el valor correcto.
Para números locales a nacionales, no puedo ayudarte ya que no tengo tales características en mi país y no sé cómo funciona en la tuya.
Android no almacenó el número en formato E.16 antes de Honeycomb. Por lo tanto, debe formatearlo usted mismo usando la biblioteca libphonenumber si está soportando niveles de API más bajos. La aplicación Contactos utiliza el servicio CountryDetector
para determinar el código de país si no se proporciona ninguno, que utiliza una heurística exhaustiva basada en la información disponible en el dispositivo. Este servicio no forma parte de la API pública y no estaba disponible pre-Honeycomb en ningún caso, pero puede copiar el código de la clase ComprehensiveCountryDetector
para volver a usarlo en su propia aplicación.
Tenga en cuenta que ya que la fuente de Honeycomb no está disponible, y no tuve la oportunidad de probar en un dispositivo Honeycomb, no puedo comentar sobre lo que el estado está en Honeycomb relacionado con estos problemas.