Pregunta ¿Cómo obtener el número actual de la tarjeta SIM en Android?


Quiero saber el número de móvil del usuario en Android. Usé este código pero no obtengo el número.

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
        String n = tm.getLine1Number();

Permiso:

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

¿Es obligatorio guardar el número en el móvil de Android? settings --> about phone --> status --> myphone number

Alguna idea sobre esto?


32
2017-12-27 07:27


origen


Respuestas:


Creo que el número de serie y el número sim son únicos. Puede probar esto para obtener el número de serie de la SIM y obtener el número SIM y No olvide agregar el permiso en el archivo de manifiesto.

TelephonyManager telemamanger = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String getSimSerialNumber = telemamanger.getSimSerialNumber();
String getSimNumber = telemamanger.getLine1Number();

Y agregue el permiso debajo de su Androidmanifest.xml archivo.

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

Avísame si hay algún problema.


24
2017-12-27 07:31



Obtener el número de teléfono, el IMEI y la ID de la tarjeta SIM

TelephonyManager tm = (TelephonyManager) 
            getSystemService(Context.TELEPHONY_SERVICE);        

Para la tarjeta SIM, use getSimSerialNumber ()

    //---get the SIM card ID---
    String simID = tm.getSimSerialNumber();
    if (simID != null)
        Toast.makeText(this, "SIM card ID: " + simID, 
        Toast.LENGTH_LONG).show();

Número de teléfono de su teléfono, use el getLine1Number () (algunos dispositivos no devuelven el número de teléfono)

    //---get the phone number---
    String telNumber = tm.getLine1Number();
    if (telNumber != null)        
        Toast.makeText(this, "Phone number: " + telNumber, 
        Toast.LENGTH_LONG).show();

Número de IMEI del teléfono, use getDeviceId ()

    //---get the IMEI number---
    String IMEI = tm.getDeviceId();
    if (IMEI != null)        
        Toast.makeText(this, "IMEI number: " + IMEI, 
        Toast.LENGTH_LONG).show();

Permisos necesarios

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

7
2018-03-17 11:28



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 amablemente esta respuesta.

=============================================== ============================

Han pasado casi 6 meses y creo que debería actualizar esto con una solución alternativa que tal vez desee considerar.

A partir de hoy, puede confiar en otra gran aplicación de Whatsapp, utilizando AccountManager. Millones de dispositivos tienen esta aplicación instalada y si no puede obtener el número de teléfono a través de TelephonyManager, puede darle una oportunidad.

Permiso:

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

Código:

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

ArrayList<String> googleAccounts = new ArrayList<String>();
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);
}

Verifique la cuenta de actype para whatsapp

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

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


6
2018-05-08 04:06



Tienes todo bien, pero el problema es con getLine1Number() función.

getLine1Number () - este método devuelve la cadena del número de teléfono para la línea   1, es decir, el MSISDN para un teléfono GSM. Devuelve nulo si no está disponible.

este método funciona solo para pocos teléfonos celulares pero no para todos los teléfonos.

Por lo tanto, si necesita realizar operaciones de acuerdo con la tarjeta SIM (que no sea la llamada), debe usar getSimSerialNumber(). Es siempre único, válido y siempre existe.


3
2017-12-27 07:58



Requiere el READ_PHONE_STATE permiso.     

TelephonyManager telMgr = (TelephonyManager) 
                           context.getSystemService(Context.TELEPHONY_SERVICE);
String deviceID = telMgr.getDeviceId();
String simSerialNumber = telMgr.getSimSerialNumber(); 
String simLineNumber = telMgr.getLine1Number(); 

1
2017-12-27 07:30



Puede usar TelephonyManager para hacer esto:

TelephonyManager t = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String number = t.getLine1Number();

Has usado

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

-10
2017-12-27 07:29