your studio sim see phone number how getdeviceid from example check android phone-number telephonymanager

studio - how to see phone number on android



Obtenga programáticamente el número de teléfono del teléfono Android. (15)

Actualización: esta respuesta ya no está disponible porque Whatsapp dejó de exponer el número de teléfono como nombre de cuenta, por favor ignore esta respuesta.

En realidad, hay una solución alternativa que podría considerar si no puede obtenerla a través del servicio de telefonía.

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(); 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 la cuenta de WhatsApp.

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

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

¿Cómo puedo obtener el número de teléfono del dispositivo que ejecuta mi aplicación de Android mediante programación?


A veces, debajo del código se devuelve una cadena null o en blanco.

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

Con el permiso de abajo

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

Hay otra forma en que podrá obtener su número de teléfono, no lo he probado en varios dispositivos, pero el código anterior no funciona cada vez.

Pruebe el siguiente código:

String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"}; Object object = getContentResolver().query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"), main_data, "mimetype=?", new String[]{"vnd.android.cursor.item/phone_v2"}, "is_primary DESC"); if (object != null) { do { if (!((Cursor) (object)).moveToNext()) break; // This is the phoneNumber String s1 = ((Cursor) (object)).getString(4); } while (true); ((Cursor) (object)).close(); }

Deberá agregar estos dos permisos.

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

Espero que esto ayude, gracias!


Así es como se solicita un número de teléfono a través de la API de Play Services sin el permiso y los trucos. https://android-developers.googleblog.com/2017/10/effective-phone-number-verification.html y ejemplo completo .

En su build.gradle (se requiere la versión 10.2.x y superior):

compile "com.google.android.gms:play-services-auth:$gms_version"

En su actividad (el código está simplificado):

@Override protected void onCreate(Bundle savedInstanceState) { // ... googleApiClient = new GoogleApiClient.Builder(this) .addApi(Auth.CREDENTIALS_API) .build(); requestPhoneNumber(result -> { phoneET.setText(result); }); } public void requestPhoneNumber(SimpleCallback<String> callback) { phoneNumberCallback = callback; HintRequest hintRequest = new HintRequest.Builder() .setPhoneNumberIdentifierSupported(true) .build(); PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest); try { startIntentSenderForResult(intent.getIntentSender(), PHONE_NUMBER_RC, null, 0, 0, 0); } catch (IntentSender.SendIntentException e) { Logs.e(TAG, "Could not start hint picker Intent", e); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PHONE_NUMBER_RC) { if (resultCode == RESULT_OK) { Credential cred = data.getParcelableExtra(Credential.EXTRA_KEY); if (phoneNumberCallback != null){ phoneNumberCallback.onSuccess(cred.getId()); } } phoneNumberCallback = null; } }

Esto generará un diálogo como este:


Aunque es posible tener varias cuentas de correo de voz, al llamar desde su propio número, los operadores lo dirigen al correo de voz. Por lo tanto, TelephonyManager.getVoiceMailNumber() o TelephonyManager.getCompleteVoiceMailNumber() , dependiendo del sabor que necesite.

Espero que esto ayude.


Código:

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

Permiso requerido:

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

Advertencias:

De acuerdo con los comentarios altamente actualizados, hay algunas advertencias a tener en cuenta. Esto puede devolver null o "" o incluso "???????" , y puede devolver un número de teléfono antiguo que ya no es válido. Si desea algo que identifique de forma exclusiva el dispositivo, debe usar getDeviceId() lugar.


Como se publicó en mi respuesta anterior

Use el siguiente código:

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

En AndroidManifest.xml, otorga el siguiente permiso:

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

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 marcar 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, ¡entonces no podrá obtener a través de este código!

Solución sugerida:

  1. Obtenga el número de teléfono del usuario como entrada manual del usuario.
  2. Enviar un código al número de móvil del usuario a través de SMS.
  3. Pídale al usuario que ingrese el código para confirmar el número de teléfono.
  4. Guarde el número en sharedpreference.

Realice los 4 pasos anteriores como actividad única durante el primer lanzamiento de la aplicación. Más adelante, cuando se requiera un número de teléfono, use el valor disponible en la preferencia compartida.


En primer lugar, obtener el número de teléfono móvil de los usuarios es contrario a 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 un 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 "??????"

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> TelephonyManager tel= (TelephonyManager)this.getSystemService(Context. TELEPHONY_SERVICE); String PhoneNumber = tel.getLine1Number();

Nota: - He probado esta solución en el siguiente dispositivo Moto x, Samsung Tab 4, Samsung S4, Nexus 5 y Redmi 2 prime, pero no funciona cada vez que devuelve una cadena vacía, por lo que la conclusión es inútil.

  1. Este método funciona solo en Redmi 2 prime, pero para esto es necesario agregar permiso de contacto de lectura en el manifiesto.

Nota: - Esta tampoco es la solución garantizada y eficiente. He probado esta solución en muchos dispositivos, pero funcionó solo en Redmi 2 prime, que es un dispositivo dual sim. Me da dos números de teléfono. El primero es correcto, pero el segundo no. pertenezco a mi segunda tarjeta SIM, pertenezco a mi tarjeta SIM antigua que no estoy usando.

String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"}; Object object = getContentResolver(). query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"), main_data, "mimetype=?", new String[]{"vnd.android.cursor.item/phone_v2"}, "is_primary DESC"); String s1=""; if (object != null) { do { if (!((Cursor) (object)).moveToNext()) break; // This is the phoneNumber s1 =s1+"---"+ ((Cursor) (object)).getString(4); } while (true); ((Cursor) (object)).close(); }

  1. En mi investigación encontré anteriormente que era posible obtener un número de teléfono móvil con la cuenta de WhatsApp, pero ahora la nueva versión de Whatsapp no ​​almacena el número de teléfono móvil del usuario.

Conclusión : - Android no tiene ninguna solución garantizada para obtener el número de teléfono móvil del usuario mediante programación.

Sugerencia : - 1. Si desea verificar el número de teléfono móvil del usuario, pídale al usuario que proporcione su número; con otp puede verificarlo.

  1. Si desea identificar el dispositivo del usuario, para esto puede obtener fácilmente el número IMEI del dispositivo.

Esta es una respuesta más simplificada:

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


Hay una nueva API de Android que permite al usuario seleccionar su número de teléfono sin la necesidad de un permiso. Eche un vistazo a: https://android-developers.googleblog.com/2017/10/effective-phone-number-verification.html

// Construct a request for phone numbers and show the picker private void requestHint() { HintRequest hintRequest = new HintRequest.Builder() .setPhoneNumberIdentifierSupported(true) .build(); PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent( apiClient, hintRequest); startIntentSenderForResult(intent.getIntentSender(), RESOLVE_HINT, null, 0, 0, 0); }


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, o se transmite desde la red al teléfono. Esto es especialmente cierto en algunos países que requieren verificación de dirección física, y la asignación de números solo se realiza 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, esta es la forma en que 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 guarde.


Solo quiero agregar un poco aquí a las explicaciones anteriores en las respuestas anteriores. Lo que ahorrará tiempo para otros también.

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 que había transferido mi número al nuevo simulador. Así que si entro en Configuración> Acerca del teléfono> Estado> Mi número de teléfono, aparece "Desconocido".


TelephonyManager no es la solución correcta, ya que en algunos casos el número no se almacena en la tarjeta SIM. Debido a mi sugerencia, debe usar la preferencia compartida para almacenar el número de teléfono del usuario la primera vez que se abra la aplicación, y luego se utilizará el número siempre que Necesitas en aplicación.


Una pequeña aportación. En mi caso, el código lanzó una excepción de error. He necesitado poner una anotación para que el código se ejecute y solucionar ese problema. Aquí te dejo este código.

public static String getLineNumberPhone(Context scenario) { TelephonyManager tMgr = (TelephonyManager) scenario.getSystemService(Context.TELEPHONY_SERVICE); @SuppressLint("MissingPermission") String mPhoneNumber = tMgr.getLine1Number(); return mPhoneNumber; }


mientras trabajaba en una aplicación de seguridad que necesitaba obtener el número de teléfono de quien, por lo tanto, mi teléfono podría tener en sus manos, tenía que hacer esto; 1. reciba Boot completado y luego intente obtener Line1_Number de telephonyManager que devuelve un resultado de cadena. 2. compare 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. envíe secretamente un SMS con el resultado de la cadena más un signo especial a mi número de oficina. 4. Si el envío de mensajes falla, inicie un servicio y siga intentándolo después de cada hora hasta que los SMS enviados tengan intenciones pendientes. Con estos pasos pude obtener el número de la persona que usa mi teléfono perdido. No importa si la persona está acusada.


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; }

Código tomado de http://www.androidsnippets.com/get-my-phone-number