¿Cómo puedo obtener programáticamente el número de teléfono del dispositivo que ejecuta mi aplicación de Android?
443
¿Cómo puedo obtener programáticamente el número de teléfono del dispositivo que ejecuta mi aplicación de Android?
Respuestas:
Código:
Permiso requerido:
Advertencias:
De acuerdo con los comentarios altamente votados, hay algunas advertencias a tener en cuenta. Esto puede devolver
null
o""
incluso"???????"
, y puede devolver un número de teléfono obsoleto que ya no es válido. Si desea algo que identifique de forma exclusiva el dispositivo, debe usarlogetDeviceId()
en su lugar.fuente
null
. Dicho esto, no estoy al tanto de una mejor respuesta.No hay una solución garantizada para este problema porque el número de teléfono no se almacena físicamente en todas las tarjetas SIM, ni se transmite desde la red al teléfono. Esto es especialmente cierto en algunos países que requieren la verificación de la dirección física, con la asignación de números solo después. La asignación del número de teléfono ocurre en la red, y se puede cambiar sin cambiar la tarjeta SIM o el dispositivo (por ejemplo, así es como se admite la transferencia).
Sé que es doloroso, pero lo más probable es que la mejor solución sea pedirle al usuario que ingrese su número de teléfono una vez y lo almacene.
fuente
Actualización: esta respuesta ya no está disponible ya que Whatsapp dejó de exponer el número de teléfono como nombre de cuenta, ignore esta respuesta.
En realidad, es posible que desee considerar una solución alternativa si no puede obtenerla a través del servicio de telefonía.
A partir de hoy, puede confiar en otra gran aplicación Whatsapp, utilizando
AccountManager
. Millones de dispositivos tienen instalada esta aplicación y, si no puede obtener el número de teléfono, puede intentarloTelephonyManager
.Permiso:
Código:
Verifique la
actype
cuenta de WhatsAppPor supuesto, es posible que no lo obtenga si el usuario no instaló WhatsApp, pero vale la pena intentarlo de todos modos. Y recuerde que siempre debe pedirle confirmación al usuario.
fuente
Como publicado en mi respuesta anterior
Use el siguiente código:
En AndroidManifest.xml, otorgue el siguiente permiso:
Pero recuerde, este código no siempre funciona, ya que el número de teléfono celular depende de la tarjeta SIM y del operador de red / operador de telefonía celular.
Además, intente verificar en Teléfono -> Configuración -> Acerca de -> Identidad del teléfono , si puede ver el Número allí, la probabilidad de obtener el número de teléfono del código anterior es mayor. Si no puede ver el número de teléfono en la configuración, ¡no podrá obtenerlo a través de este código!
Solución sugerida:
Realice los 4 pasos anteriores como actividad única durante el primer inicio de la aplicación. Más adelante, cuando se requiera un número de teléfono, use el valor disponible en preferencia compartida.
fuente
Así es como solicitas un número de teléfono a través de la API de Play Services sin el permiso y los hacks. Fuente y ejemplo completo .
En su build.gradle (se requiere la versión 10.2.xy superior):
En su actividad (el código está simplificado):
Esto generará un diálogo como este:
fuente
Código tomado de http://www.androidsnippets.com/get-my-phone-number
fuente
Hay una nueva API de Android que permite al usuario seleccionar su número de teléfono sin la necesidad de un permiso. Echa un vistazo a: https://android-developers.googleblog.com/2017/10/effective-phone-number-verification.html
fuente
Solo quiero agregar un poco aquí a las explicaciones anteriores en las respuestas anteriores. Lo que también ahorrará tiempo para los demás.
En mi caso, este método no devolvió ningún número de móvil, se devolvió una cadena vacía. Fue debido al caso de que había portado mi número en el nuevo sim. Entonces, si entro en Configuración> Acerca del teléfono> Estado> Mi número de teléfono, me muestra "Desconocido".
fuente
A veces, debajo del código devuelve
null
o cadena en blanco.Con el siguiente permiso
Hay otra manera de que pueda obtener su número de teléfono, no lo he probado en varios dispositivos, pero el código anterior no funciona todo el tiempo.
Pruebe el siguiente código:
Deberá agregar estos dos permisos.
Espero que esto ayude, ¡Gracias!
fuente
String s1
será el número de teléfono.Esta es una respuesta más simplificada:
fuente
En primer lugar, obtener el número de teléfono móvil de los usuarios va en contra de la política ética, antes era posible, pero ahora, según mi investigación, no hay una solución sólida disponible para esto. Al usar algún código, es posible obtener el número de teléfono móvil, pero no hay garantía de que funcione. solo en pocos dispositivos. Después de mucha investigación, encontré solo tres soluciones, pero no funcionan en todos los dispositivos.
Hay la siguiente razón por la que no estamos recibiendo.
1.El dispositivo Android y la nueva tarjeta Sim no almacenan el número de teléfono móvil si el número de teléfono móvil no está disponible en el dispositivo y en la tarjeta SIM, entonces, ¿cómo es posible obtener el número? sabio devolverá el "nulo" o "" o "??????"
fuente
TelephonyManager
no es la solución correcta, porque en algunos casos el número no se almacena en la SIM. Le sugiero que use la preferencia compartida para almacenar el número de teléfono del usuario por primera vez que la aplicación esté abierta y el número se usará cuando lo necesite.fuente
Aquí hay una combinación de las soluciones que he encontrado (proyecto de muestra aquí , si desea verificar también el autocompletado):
manifiesto
build.gradle
MainActivity.kt
fuente
Un pequeño aporte. En mi caso, el código lanzó una excepción de error. Necesito poner una anotación para que se ejecute el código y solucionar ese problema. Aquí dejo este código.
fuente
Aunque es posible tener varias cuentas de correo de voz, cuando llama desde su propio número, los operadores lo enrutan al correo de voz. Entonces,
TelephonyManager.getVoiceMailNumber()
oTelephonyManager.getCompleteVoiceMailNumber()
, dependiendo del sabor que necesites.Espero que esto ayude.
fuente
Agregue esta dependencia:
implementation 'com.google.android.gms:play-services-auth:18.0.0'
Para buscar la lista de números de teléfono, use esto:
Después de tocar en el cuadro de diálogo de servicios de reproducción:
fuente
mientras trabajaba en una aplicación de seguridad que necesitaba obtener el número de teléfono de quién podría tener mi teléfono en mis manos, tuve que hacer esto; 1. reciba el inicio completado y luego intente obtener Line1_Number de telephonyManager que devuelve un resultado de cadena. 2. comparar el resultado de la Cadena con mi propio número de teléfono y si no coinciden o si la cadena devuelve un valor nulo, 3. enviar secretamente un SMS que contenga el resultado de la cadena más un signo especial al número de mi oficina. 4. si falla el envío del mensaje, inicie un servicio y siga intentándolo después de cada hora hasta que el intento de envío de SMS pendiente vuelva con éxito. Con estos pasos podría obtener el número de la persona que usa mi teléfono perdido. No importa si la persona está acusada.
fuente