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.

  1. 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!

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.

  • ¿Cómo puedo recuperar eventos de contacto sincronizados desde Contactos de Google sin un año?
  • Obtener información de contacto de selector de contactos android
  • Insertar contactos Apellido utilizando Intent android
  • Leer todos los datos de contacto
  • Telephony.Sms.Inbox.PERSON utiliza Contacts.People._ID obsoletos
  • Cómo buscar Contactos con dirección (FORMATTED_ADDRESS) con una consulta?
  • ¿Qué significa COLLATE LOCALIZED ASC?
  • Android Contacts.CONTENT_STREQUENT_URI lanza SQLiteException en Android 4.1.2 y 4.4.2
  • ¿Cómo obtener el ID de Facebook de un usuario a través de la API de ContactsContracts?
  • Insertar contacto en Android con ContactsContract
  • ¿Cómo puedo cargar una foto de contacto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.