201 votos

¿Cómo puedo obtener el número del teléfono Android con la API mediante programación?

¿Cómo puedo mediante programación el número de teléfono del dispositivo que esté ejecutando mi aplicación para android?

290voto

Alex Volovoy Puntos 34562

Código:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

Permisos necesarios:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

93voto

Johan Puntos 731

No hay ninguna garantía de solución a este problema porque el número de teléfono no está almacenada físicamente en todas las tarjetas SIM, o transmitidos desde la red para el teléfono. Esto es especialmente cierto en algunos países, donde se requiere dirección física de la verificación, con número de asignación, sólo ocurre después. Número de teléfono de la asignación que sucede en la red, y puede ser cambiado sin cambiar la tarjeta SIM o dispositivo (por ej. esta es la forma en la transferencia está soportado).

Sé que es el dolor, pero lo más probable es que la mejor solución es sólo para pedir al usuario que introduzca su número de teléfono una vez y almacenar.

29voto

Chor WaiChun Puntos 1528

Actualización: Esta respuesta ya no está disponible como Whatsapp había dejado de exponer el número de teléfono como nombre de cuenta, la amabilidad de hacer caso omiso a esta respuesta. =================================================================================

En realidad, hay una solución alternativa, se podría considerar, si usted no puede conseguir es a través de servicio de telefonía.

A partir de hoy, usted puede confiar en otro de los grandes de la aplicación Whatsapp, el uso de AccountManager. Millones de dispositivos se han instalado esta aplicación y si usted no puede conseguir el número de teléfono a través de TelephonyManager, usted puede dar a este un tiro.

Permiso:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

Código:

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

for (Account ac : accounts) {
    String acname = ac.name;
    String actype = ac.type;
    // Take your time to look at all available accounts
    System.out.println("Accounts : " + acname + ", " + actype);
}

Compruebe actype para whatsapp cuenta

if(actype.equals("com.whatsapp")){
    String phoneNumber = ac.name;
}

Por supuesto, usted no puede conseguir si el usuario no instalar Whatsapp, pero vale la pena intentarlo de todos modos. Y recuerde que siempre debe pedir confirmación al usuario.

13voto

Emil Hajric Puntos 417
private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
        getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s != null && s.length() > 2 ? s.substring(2) : null;
}

http://www.androidsnippets.com/get-my-phone-number

5voto

E P Lewis Puntos 59

Esta es una respuesta más simplificada:

public String getMyPhoneNumber()
{
    return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
            .getLine1Number();
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X