2012-09-05 20 views
7

Necesito comparar dos números de teléfono para determinar si son del mismo emisor/receptor. El usuario puede enviar un mensaje a un contacto, y ese contacto puede responder.Comparar números de teléfono en Android

La respuesta generalmente viene en el formato +[country-code][area-code-if-any][and-then-the-actual-number]. Por ejemplo, +94 71 2593276 para obtener un número de teléfono de Sri Lanka.

Y cuando el usuario envía un mensaje, que por lo general se introduce en el formato (para el ejemplo anterior) 0712593276 (suponiendo que está también en Sri Lanka).

Lo que necesito es, Necesito comprobar si estos dos números son los mismos. Esta aplicación se usará internacionalmente. Así que no puedo simplemente reemplazar los primeros 2 dígitos con un 0 (entonces será un problema para países como Estados Unidos). ¿Hay alguna forma de hacer esto en Java o Android específicamente?

Gracias.

+0

Los números de teléfono no siguen reglas simples que se aplican en todos los países. Deberá codificar casos para cada país. –

+0

@PeterLawrey Eso parece un poco extremo ... :) Pero debería ser posible. Solo piense en la aplicación de mensajería Android estándar. Reconocerá si es el mismo número si ingresamos o no en ambos sentidos. – Roshnal

+0

Me imagino que tiene una tabla de búsqueda para esto. ¿Hay alguna forma de leer la fuente de esta aplicación o descompilarla? –

Respuesta

2

¿Qué tal si compruebas si el número es una subcadena del número del receptor?

Por ejemplo, digamos que mi número brasileño es 888-777-666 y el suyo es 111-222-333. Para llamarte, desde aquí, necesito marcar números adicionales para hacer llamadas internacionales. Digamos que necesito agregar 9999 + su_número, lo que da como resultado 9999111222333.

Si RawNumber.substring(your_number) devuelve true puedo decir que te estoy llamando.

-1

acaba de aplicar su lógica para eliminar() y - y seguir PhoneNumberUtils

5

android.telephony. PhoneNumberUtils clase proporciona casi todas las funciones necesarias para tratar con números de teléfono y normas.

Para su caso, la solución es PhoneNumberUtils. compare(Context context, String number1, String number2) o bien . La primera revisa un recurso para determinar si se usa un algoritmo de comparación estricto o suelto, por lo tanto, la mejor opción en la mayoría de los casos.

PhoneNumberUtils.compare("0712593276", "+94712593276") // always true 
PhoneNumberUtils.compare("0712593276", "+44712593276") // always true 

// true or false depends on the context 
PhoneNumberUtils.compare(context, "0712593276", "+94712593276") 

Eche un vistazo a la documentation oficial. Y el source code.

Cuestiones relacionadas