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

Quiero saber el número de teléfono del usuario en Android. He utilizado este código, pero no estoy recibiendo 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 la settings --> about phone --> status --> myphone number android mobile settings --> about phone --> status --> myphone number

¿Alguna idea sobre esto?

Creo que el número de serie SIM y el número de sim es único. Usted puede intentar esto para obtener el número de serie del sim y obtener el número de sim y No se olvide de agregar permiso en el archivo de manifiesto.

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

Y añada el permiso a continuación en su archivo Androidmanifest.xml .

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

Déjeme saber si hay cualquier problema.

Actualización: Esta respuesta ya no está disponible ya que Whatsapp había dejado de exponer el número de teléfono como nombre de cuenta, por favor, no tenga en cuenta esta respuesta.

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

Ha sido casi 6 meses y creo que debería actualizar esto con una solución alternativa que usted puede ser que desee considerar.

A partir de hoy, puede confiar en otra aplicación grande 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); } 

Comprobar el tipo de cuenta de WhatsApp

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

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

Cómo obtener el número de teléfono, IMEI y la ID de la tarjeta SIM

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

Para la tarjeta SIM, utilice el comando 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(); 

IMEI del teléfono, utilice el comando 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"/> 

Usted tiene todo derecho, pero el problema es con la función getLine1Number() .

GetLine1Number (): este método devuelve la cadena de números de teléfono para la línea 1, es decir, el MSISDN para un teléfono GSM. Devuelve null si no está disponible.

Este método funciona sólo para algunos teléfonos celulares, pero no todos los teléfonos.

Por lo tanto, si necesita realizar operaciones de acuerdo con el sim (que no sea la llamada), entonces debe utilizar getSimSerialNumber() . Siempre es único , válido y siempre existe .

Requiere el permiso READ_PHONE_STATE.

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

Puede utilizar 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"/> 
  • GetPsc () utilizando GsmCellLocation siempre devuelve -1
  • Cómo obtener la fuerza de la señal de android
  • ¿Qué información proporciona Baseband en Android?
  • ¿Cómo puedo comprobar si la tarjeta SIM está disponible en un dispositivo Android?
  • Aplicación Android de telefonía que mantiene el foco en las llamadas entrantes
  • Android Cómo obtener el número de teléfono del teléfono Dual sim
  • Cómo detectar el estado contestado o rechazado en la llamada saliente
  • SubscriptionInfo.getMnc () devuelve el mismo valor para los SIMs con diferentes portadoras
  • Problemas con getLine1Number () para obtener el número de teléfono de los dispositivos
  • ¿Cómo distinguir el estado de encendido / apagado de la pantalla durante la llamada entrante?
  • ¿Cómo obtener la ubicación actual y el tiempo de descolgado de la llamada saliente (tiempo de llamada exacto seleccionado)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.