2011-02-27 15 views
29

Deseo obtener el número de teléfono del dispositivo Android. Yo uso este código:¿Ha fallado TelephonyManager.getLine1Number()?

TelephonyManager tm = (TelephonyManager)this.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
String phoneNumber= tm.getLine1Number(); 

En mi teléfono (HTC Wildfire) No puedo obtener el número de teléfono - todo lo que consigo es una cadena vacía. Si ejecuto código en emulatur, normalmente se muestra el número de teléfono.

Si voy a Configuración => Acerca del teléfono => Identidad del teléfono-> Número de teléfono, el número de teléfono es "Desconocido".

¿Dónde está el problema? ¿Hay algún problema con mi SIM?

+1

¿En su teléfono actual dice que su número de teléfono es "Desconocido"? –

+4

Voy a dar gruñidos por esto, pero no todos los que están en SO ¿tienen problemas para obtener números de teléfono? : D Lo siento, tenía que hacerse. Pero no creo que sea un problema con su SIM, es posible que su proveedor de servicios no haya especificado el número en su teléfono durante la activación. – Sumit

Respuesta

34

Tuvimos el mismo problema en nuestro proyecto. La conclusión fue que depende de la tarjeta SIM.

¿Qué nos pasó:

  • Galaxy S con AT & tarjeta T SIM: puede leer el número de teléfono, Ajustes muestra número
  • misma galaxia con una tarjeta SIM Europea: no se puede leer el número y "desconocido "en Ajustes (teléfono celular era perfectamente funcional, simplemente no podía leer el número)

Esto ha sido reportado en otros foros también.

Al final, decidimos pedirle al usuario el número de teléfono. Un poco más involucrado, en realidad: if("SIM card present" && "cannot read the cell number") "ask user";. De lo contrario, seguiremos molestando al usuario que no tiene una tarjeta SIM en primer lugar.

+0

getLine1Number() solo obtiene el número almacenado en la tarjeta SIM ... muchos operadores no escriben allí el número sim ... en algunos teléfonos (nokia, blackberry, algunos años android, iphone) puede establecer su propio número de móvil y el teléfono lo almacenará en la tarjeta SIM, en ese punto getLine1Number() devolverá el número de teléfono. – andQlimax

+0

@andQlimax ¿Cómo hacer eso? –

+0

@ShobhitPuri almacenar el número en la tarjeta SIM depende del teléfono y de la versión de Android en él. En algunos teléfonos Android hay una opción en "configuración de llamadas-> configuraciones adicionales-> su número" allí puede establecer el número. .no puedes hacerlo llamando a una API, es una opción de nivel de sistema incluida en el teléfono rom – andQlimax

5

La tarjeta SIM almacena el número de teléfono y usted puede editarlo. No puedo decir para Android, pero en WM puede editar fácilmente su número de teléfono, que está almacenado en la tarjeta SIM. Por supuesto, no significa que pueda cambiar su número de teléfono sobre la marcha. En realidad, puede escribir allí cualquier número que desee y los programas creerán que este es su número real :)

+3

incluso algunas personas -1 en ti, estás en lo cierto. – andQlimax

+1

@trashkalmar: ¿Cómo se puede hacer eso? ¿Es posible en teléfonos no rooteados también? Supongo que no tiene nada que ver con rooting de un teléfono? –

+1

No estoy seguro de que sea posible en Android, pero lo he hecho en Windows Mobile. Tal vez, existe algún comando AT. – trashkalmar

2

Cuando moví una tarjeta SIM a un teléfono nuevo, a veces descubrí que el número de teléfono no aparece en Configuración -> Acerca del teléfono -> Estado -> Mi número de teléfono.

Mis puntos de datos:

  • EN & T Atrix poner completamente nueva tarjeta SIM en el que dice “Voz MSISDN Línea1 nula”.
  • T-Mobile G1 colocando nueva tarjeta SIM correctamente muestra el número de teléfono.
  • T-Mobile G2 moviendo la tarjeta SIM de mi antiguo G1 a se dice "Desconocido".
0

Número de teléfono disponible si la tarjeta SIM le permite obtener la suya. En nuestra compañía encontré solo una tarjeta SIM, que está permitida obtener el número. Estoy utilizando esta tarjeta SIM en todos los dispositivos Android. Todo bien. getLine1Number() está bien. Ahora estoy buscando el número de teléfono de otra tarjeta SIM. Enviar sms a nuestro servidor sms u otro dispositivo Android (con el procesamiento de SMS)

11

En lugar del número de teléfono, use el número de serie de la tarjeta SIM, que siempre existe y siempre tiene un valor válido.

telephonyManager.getSimSerialNumber(); 

número de serie SIM es único dentro del operador al menos.Así que combinado con

telephonyManager.getNetworkOperator(); 

tendrá un identificador único para un suscriptor dentro de un país.

Esto, combinado con

telephonyManager.getNetworkCountryIso(); 

tendrá un identificador único global para un abonado.

Espero que esto ayude.

Saludos.

+1

¿Qué sucede si el usuario no tiene una tarjeta SIM o tiene varias tarjetas SIM? – bitek

+0

Entonces, obviamente, este método no funcionará. Debe buscar un identificador único diferente para su aplicación si tiene la intención de crear una aplicación para dispositivos que por algún motivo no tienen una SIM (como la mayoría de las tabletas). TelephonyManager atiende múltiples SIMs –

0

Utilizo una tarjeta SIM que solo permite la transferencia de datos. No permite llamadas telefónicas.

Cuando intento obtener un número de teléfono con getLine1Number(), obtengo una cadena vacía.

Cuestiones relacionadas